2016-07-24 4 views
1

Я знаю, что есть несколько вопросов, задаваемых онлайн по подобным вопросам, но, к сожалению, никто из них не помог мне решить эту относительно простую ситуацию, как следует из названия.qmake не вызывает uic

Я создал минимальный Qt проект, в котором возникает проблема:

├── main.cpp 
├── mainwindow.ui 
└── qt.pro 

main.cpp:

#include <QtWidgets/QtWidgets> 
#include "ui_mainwindow.h" 

int main() { 
    return 0; 
} 

qt.pro:

TEMPLATE = app 
TARGET = qt-qmake-uic-problem 
INCLUDEPATH += . 

# Input 
FORMS += mainwindow.ui 
SOURCES += main.cpp 

Файл MainWindow. ui является стандартной формой MainWindow, предоставляемой Qt Creator.

Теперь, если я бегу

qmake qt.pro 

затем Makefile создается вызывает эту ошибку, когда делают запускается на выполнение:

[[email protected] qt-qmake-uic-problem]$ make 
g++ -c -pipe -O2 -march=i686 -mtune=generic -O2 -pipe -fstack-protector-strong -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtGui -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o main.o main.cpp 
main.cpp:2:28: fatal error: ui_mainwindow.ui: No such file or directory 
#include "ui_mainwindow.h" 
          ^
compilation terminated. 
make: *** [Makefile:298: main.o] Error 1 

По моему лучшее знание ui_mainwindow.h должны быть сгенерированы либо QMAKE или по Makefile - не сам, вызывая uic вручную. Я должен отметить, что что-то подобное происходит с moc, а также, выполняя мои исследования, я не нашел объяснений ни в документации, ни в похожих проблемах, хотя было бы странно, если бы эта установка qmake была нарушена - я запускаю Arch Linux и получил Qt SDK из репозитория по умолчанию.

Большое спасибо за помощь в совете!

+0

Попробуйте включить 'mainwindow.ui' вместо' ui_mainwindow.ui' – wasthishelpful

+0

Спасибо за быстрый ответ! К сожалению, это не сработало, и результаты остались прежними. Файлы не генерировались, а g ++ - ошибка «нет такого файла или каталога». –

+1

@wasthishelpful, это * 'ui_mainwindow.h' *. Нелогично включать файл 'mainwindow.ui' xml в файл cpp' main.cpp' – Mike

ответ

1

Предполагая, что вы используете QT-5:

Если вы хотите использовать элементы пользовательского интерфейса Линке в QMainWindow или других виджетов QT, Вам необходимо включить виджеты обычно в конфигурации проекта:

QT += widgets 

Этот затем активирует обработку содержимого FORMS, например mainwindow.ui, в вашем примере и приводит к тому, что ваш код будет связан с соответствующими библиотеками.

Смотрите также здесь: http://doc.qt.io/qt-5/qtwidgets-index.html

+0

Большое спасибо! Я думал о том, было ли я уже пробовал это решение, получив Qt + = в другом проекте вместо QT + =. Задача решена :) –