Объект / класс Qt в файл пользовательского интерфейса Qt - PullRequest
9 голосов
/ 17 ноября 2011

Это может показаться очень странным вопросом, но возможно ли сгенерировать форму Qt Designer (.ui) из объекта Qt, скажем что-то, что наследует QWidget?

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

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

Ответы [ 5 ]

2 голосов
/ 09 февраля 2012

Инструмент Qt-Introspection GammaRay может сохранять диалоги из файла AUI (проверяемого приложения) в .ui файлах в его последней версии, IIRC.

1 голос
/ 22 ноября 2011

Поскольку QWidget наследует от QObject, он получает все проверки динамических свойств, предоставляемые QObject. QObjects (и QWidgets) также естественным образом упорядочиваются в деревья (см. QObject :: parent и QObject :: children). Следуя дереву виджетов и получая свойства каждого из них, вы можете сгенерировать XML-файл .ui, содержащий основную информацию о каждом элементе управления.

Обработка соединений сигнал / слот из заранее установленной формы может быть немного сложнее, поскольку, похоже, нет никакого способа получить информацию о них, кроме QObject :: dumpObjectInfo, кроме программы, которую вы описываете в на ваш вопрос достаточно легко отследить их другим способом.

0 голосов
/ 01 февраля 2012

Вы также можете встроить Qt Designer в свой собственный код, используя модуль конструктора. Вам нужно добавить CONFIG + = designer в ваш .pro файл.

Пожалуйста, посмотрите на дизайнерский модуль здесь: http://developer.qt.nokia.com/doc/qt-4.8/qtdesigner.html

0 голосов
/ 18 декабря 2011

Позвольте мне кое-что прояснить, Qt Designer имеет пользовательский интерфейс WYSIWYG, который создает форму Qt Designer в формате xml, которая затем преобразуется в код C ++ во время компиляции.И вы спрашиваете, можно ли сделать это задом наперед?

Да, я действительно думаю, что это возможно, так как формы Qt Designer в любом случае просто xml.Вы можете создать приложение, которое принимает код C ++, в частности код, используемый для полного объявления класса, а затем преобразовать СВОЙСТВА класса в соответствующий код XML.Это потребует большой работы, в которой на данный момент я лично больше не вижу смысла.

edit: этот проект потребует от вас обратного инжиниринга Qt Designer.но да, это очень возможно.

0 голосов
/ 17 ноября 2011

не так. Как вы помните, UI-файл является исходным кодом для генерации соответствующего .cpp-кода на compilet-me. Gui-loader является частью шаблона «точка-к-реализации», который помогает сократить время компиляции.

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