Qt designer не обновляет графический интерфейс - PullRequest
35 голосов
/ 08 декабря 2010

Кто-то ранее написал GUI в Qt designer, и теперь мне нужно изменить некоторые мелкие детали (т.е. добавить кнопку / функциональность).

Предпосылка: Я добавляю новую функцию / делаю любые изменения в файле .ui в Designer. Я могу перейти в режим редактирования и увидеть, что это вносит изменения в формат XML файла .ui

Проблема: Когда я собираю и запускаю Qt, показывается старая версия .ui (без моих обновлений функций). Я попытался очистить все и запустить qmake, но безрезультатно.

Есть идеи, почему это может происходить?

Ответы [ 14 ]

92 голосов
/ 25 марта 2013

У меня была та же проблема, и она была решена, когда я отключил «Shadow Build» в режиме «Projects».

UPD : Все еще получение голосов «против» за этот ответ меня расстраиваетпричины

  • это тривиально
  • проблема сохраняется почти через 5 лет
9 голосов
/ 30 мая 2014

Я мог бы решить эту проблему без изменения Shadow Build конфигурации. В моем проекте я хочу собрать с выходными файлами в build-ProjectName-Debug

Но QtCreator не умен, чтобы проверить, не являются ли файлы moc_FileName.cpp и ui_FileName.h в каталоге сборки. Эта проблема возникает из-за того, что если эти файлы moc_FileName.cpp и ui_FileName.h находятся в каталоге проекта, QtCreator использует их и не распознает никаких изменений в файлах .ui .

Мне было легко решить эту проблему: Удалите все moc_FileName.cpp и ui_FileName.h из каталога проекта и Перестройте . Эти файлы будут созданы в build-ProjectName-Debug , и все модификации будут там.

8 голосов
/ 08 декабря 2010

Когда вы изменяете файл .ui, кто-то должен запустить uic.exe для файла, чтобы создать файл заголовка.Например, для окна с именем MyWindow.ui будет создан файл с именем ui_MyWindow.h.

. Это то, что используется при перестройке приложения.

Вы не указываетекак вы строите или на какой ОС, так что вам сложно помочь в этом.Если вы используете Visual Studios, вы можете интегрировать файлы .ui в свои проекты, чтобы при изменении любого файла .ui все созданные файлы автоматически создавались заново.То же самое возможно, если вы используете .pri файлы.

В любом случае я бы запустил:

uic.exe -o ui_yourfile.h yourfile.ui

Пожалуйста, измените имена файлов на те, которые вы используете.uic.exe можно найти в вашем каталоге Qt bin.

Затем, как только у вас будет сгенерированный файл заголовка, попробуйте найти, куда он идет в каталоге сборки.Затем восстановите.

3 голосов
/ 14 января 2017

Это то, что мне лично помогло, добавьте в файл qmake: UI_DIR = $$PWD

3 голосов
/ 04 августа 2016

Я решаю эту проблему с помощью clean, затем build. Я считаю, что, если я проверил Shadow Build, qtCreator будет использовать старый .obj, а не генерировать новый .obj, даже если ui_xxx.h был изменен , чтобы создать .exe при отладке. Моя среда qt5.5 + msvc2013.

2 голосов
/ 17 января 2011

У меня была та же проблема, и я смог ее решить, удалив все файлы Makefile из каталога сборки, а затем перестроил заново. По какой-то причине эти файлы не удаляются при запуске Clean Project из Qt Creator.

1 голос
/ 30 сентября 2018

Играли ли вы с системной датой или временем или они отличались от тех, что были на компьютере вашего товарища? Я изменил время на несколько часов спустя для целей тестирования (и тем временем компилировал проект), и после восстановления его до текущего времени скомпилированные файлы не были обновлены, поскольку они были новее, чем время компиляции. Запуск Clean не удалил эти файлы. Снятие отметки Shadow build только дало мне сбои и не отслеживаемую ошибку 0xc0000135. Удаление вручную файлов moc _ *. O и * .cpp с будущей датой / временем из каталога сборки и повторная компиляция всего проекта было для меня решением.

1 голос
/ 15 июня 2018

В моем случае проблема была вызвана переименованием файла .ui.Qt Creator не обновил #include для файла заголовка "ui_ [name_of_ui_file] .h" в файле .cpp, соответствующем форме.В любом случае, очистка всех файлов «ui _ *. H» в папке теневых сборок решила проблему (я полагаю, что снятие флажка «теневые сборки» на вкладке «Проект» даст тот же эффект).

1 голос
/ 09 августа 2017

Я удалил все автоматические файлы в исходной папке. когда я не отмечал теневую сборку, в исходной папке был создан автоматический файл. после того, как я проверил теневую сборку, компилятор использует только файл gen исходной папки. Поэтому я удалил все автоматические файлы (ui_ , moc_ ), а затем пользовательский интерфейс обновлялся всегда.

1 голос
/ 17 сентября 2015

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

Снятие отметки с теневой сборки решило проблему для меня, но только один раз.После этого я не мог видеть последующие изменения пользовательского интерфейса снова.Поэтому я перепроверил теневую сборку и удалил существующую папку теневой сборки.Теперь это работает последовательно, пока я удаляю все файлы сборки.Но это неубедительно.Он должен иметь возможность обнаруживать изменения пользовательского интерфейса и переделывать файлы.

Я думаю, что это должно быть зарегистрировано как ошибка в Qt Creator / Designer.

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