Почему настройка файла .ui с помощью Qt Creator может привести к изменениям файла .h во время компиляции? - PullRequest
0 голосов
/ 07 июня 2019

Я заметил, что если я внесу изменения в свой файл .ui (например, добавлю виджет PushButton) и скомпилирую свой проект (с этим файлом .ui, его частью), то соответствующая запись (для виджета PushButton дляпример) в .h файл добавляется автоматически во время компиляции (строка QPushButton *examplePushButton добавляется в public: моего .h файла для класса, чей файл .ui я редактировал).

Я простоинтересно как это происходит.Во-первых, как Qt узнает, к какому файлу добавить строку (при условии, что Qt каким-то образом это делает)?И что именно происходит во время компиляции, что вызывает это?Это очень интересно.Любая помощь приветствуется.

Ответы [ 2 ]

4 голосов
/ 07 июня 2019

Система сборки, молча запускаемая QtCreator (IDE), запускает утилиту uic.exe, которая «компилирует» файл .ui в файл .h (который может понять любой компилятор, пока он не понимает формат .ui).

Это может произойти с любой системой сборки в любой IDE, правильно настроенной для работы с Qt. Он также делает то же самое для генерации moc (для управления сигналами / слотами).

Чтобы узнать, нужно ли запускать uic, он просто проверяет временные метки. Если .h старше, чем .ui, это означает, что .h нужно сгенерировать снова. Это тот же механизм, который используется вашим компилятором для определения необходимости компиляции .cpp или нет (если файл .obj / .o отсутствует или он старше, чем файл .cpp).

1 голос
/ 07 июня 2019

"Почему настройка файла .ui с помощью Qt Creator может привести к изменениям файла .h во время компиляции?"

В двух словах; Вы изменяете файл пользовательского интерфейса. Система сборки замечает, что автоматически сгенерированный заголовок (сгенерированный из файла пользовательского интерфейса) теперь устарел. Система сборки запускает uic, чтобы заново сгенерировать заголовок из нового файла пользовательского интерфейса. Затем продолжите компиляцию вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...