QT: файлы ui_* не создаются

Я знаю, что это тема, уже затронутая многими пользователями, но я не нахожу подходящего решения; У меня есть два файла формы, созданные с помощью QtDesigner:

interfaccia_test.ui

Я запускаю команду qmake -project, получая следующий файл .pro:

TEMPLATE = app
TARGET = qtgeo
INCLUDEPATH += . include

# Input
HEADERS += interfaccia.h include/localizzazione.hpp
FORMS += interfaccia.ui interfaccia_test.ui
SOURCES += interfaccia.cpp main.cpp src/localizzazione.cpp
src/SimpleSIFT.cpp

поэтому я даю команду qmake, но она не генерирует ui_interfaccia.h и ui_interfaccia_test.h, как я ожидал; затем я пытаюсь make свой проект, и у меня есть

interfaccia.h:19:28: fatal error: ui_interfaccia.h: File o directory not found
#include "ui_interfaccia.h"
                        ^

с interfaccia.h моим файлом, который использует созданный мной графический интерфейс.


person volperossa    schedule 22.05.2015    source источник


Ответы (1)


Для любого конкретного проекта вы должны использовать qmake -project только один раз. Это отправная точка, если у вас есть куча файлов и вы хотите получить шаблон проекта. Затем этот шаблон предназначен для изменения человеком - вами.

Обычный способ сборки проекта Qt на основе qmake:

qmake
make

Файлы ui_xxx.h создаются make, а не qmake. Вот список того, что делают различные инструменты:

  • qmake -project Генерирует шаблон файла .pro, который можно изменить в соответствии с проектом. Это никогда не должно использоваться вашими конечными пользователями или вами после завершения проекта. Ваша задача — поддерживать файл .pro в актуальном состоянии.
  • qmake или cmake Генерирует make-файл для системы сборки.
  • make или ninja Создает проект, генерируя все остальные файлы.

Есть два дополнительных момента:

  1. qmake не сгенерирует файл ui_xxx.h, если вы включили файл, который не будет сгенерирован. Так, например, если будет создан файл с именем ui_Interfaccia.h, но вы включили ui_interfaccia.h, то будет создан файл с неправильным именем и файл с правильным именем.

    Это имеет значение, даже если вы строите все на ОС/файловой системе, нечувствительной к регистру.

  2. Вы включаете файл с неправильным именем. Правильное имя — ui_ClassName.h, где ClassName — имя класса из файла .ui (посмотрите на первые несколько строк), с той же заглавной буквой.

person Kuba hasn't forgotten Monica    schedule 22.05.2015
comment
Я говорю о папке сборки. Вы действительно должны делать теневые сборки вне исходной папки. - person Kuba hasn't forgotten Monica; 22.05.2015
comment
Выполнено. Я создаю сборку каталога, захожу в нее и делаю qmake ..; он генерирует Makefile, я набираю make, но с теми же результатами..фатальная ошибка: ui_interfaccia.h не найден (нет такого файла ecc) - person volperossa; 22.05.2015
comment
Давайте продолжим обсуждение в чате. - person volperossa; 22.05.2015
comment
@KubaOber: Здравствуйте, у меня есть вопрос о классе, определенном в сгенерированном заголовочном файле пользовательского интерфейса. Имя класса совпадает с именем объекта фона формы пользовательского интерфейса? - person jingweimo; 12.02.2018
comment
@jingweimo Да, это так. IIRC, objectName переписан, чтобы сделать его допустимым идентификатором C++. - person Kuba hasn't forgotten Monica; 13.02.2018