Название: [РЕШЕНО] Формы UI и минимизация кода Отправлено: Alp от Сентябрь 16, 2009, 17:06 Надо сделать для диалога настроек 15 разных форм (точнее виджетов, которые будут уложены на нужное место кодом). Код (.h + .cpp) абсолютно идентичен (как я буду обрабатывать данные в формах, всякие там сигналы и проч. - другой вопрос, к делу не относится). Различаются они только именем включаемого файла ("ui_general.h", "ui_type1.h", ...), в которых совершенно одинаков задано имя класса:
Код
Теперь вопрос: как бы мне не плодя лишние файлы (по паре на каждый виджет) обойти эту проблему? Уже попробовал: - сделать класс темплейтом. Думаю не надо говорить, что не вышло - определять класс через #define. Тухло - разносить деларацию класса c именем хедера и включать её после включения соответствующего ui_*.h-файла. Не выходит потому, что moc_*.cpp тоже хочет это хэдер, а там - неполное объявление формы Код
Название: Re: Формы UI и минимизация кода Отправлено: whirlwind от Сентябрь 17, 2009, 16:33 может, можно динамически загружать ui-файлы с помощью QUiLoader?
чтото вроде Код:
правда, непонятно, как setupUi вызвать. Название: Re: Формы UI и минимизация кода Отправлено: Alp от Сентябрь 17, 2009, 17:02 Интересная мысль. Я про такую штуку вообще не знал.
А setupUi(QWidget*) тут уже будет не нужен, т.к. методо load() вернет указатель на готовый виджет. В ui_*.h метод обновляющий UI нужен потому, что класс там (если глянуть в автосоздаваемый исходник) не наследует QWidget. Название: Re: Формы UI и минимизация кода Отправлено: Alp от Сентябрь 17, 2009, 17:22 Одна непонятка - что делать с сигналами, если надо свой добавить? Связать сигнал от кнопки, например, со своим собственным с помощью дизайнера мне не удалось.
Название: Re: Формы UI и минимизация кода Отправлено: Alp от Сентябрь 17, 2009, 19:16 В общем, в рамках требуемого мне - разобрался.
Надо было сделать кучку форм, которые будут укладываться на нужное место в списке опций. От этих формочек требовалось сообщать лишь одно: "на мне изменили что-то", т.е. для каждой хватило сигнала modified(QWidget*). Реализовано через QUiLoader (не забываем подключать uitools в проекте ;-)), за что спасибо огромное товарищу whirlwind. В итоге получилась обертка над QUiLoader'ом, умеющая загружать формы, искать нужные контролы (через RTTI) и реэмитить сообщения от них. Код
Код
Название: Re: Формы UI и минимизация кода Отправлено: SLiDER от Сентябрь 19, 2009, 00:05 В общем, в рамках требуемого мне - разобрался. ... В итоге получилась обертка над QUiLoader'ом, умеющая загружать формы, искать нужные контролы (через RTTI) и реэмитить сообщения от них. Я Вас поздравляю с заслуженной победой :) , однако замечу, что qobjec_cast не имеет ни какого отношения к RTTI, а использует в своей работе Qt-шную метаинформацию, и именно по этому умеет работать только с типами явно или не явно наследованными от QObject-та. Название: Re: Формы UI и минимизация кода Отправлено: Alp от Сентябрь 19, 2009, 00:07 В общем, в рамках требуемого мне - разобрался. ... В итоге получилась обертка над QUiLoader'ом, умеющая загружать формы, искать нужные контролы (через RTTI) и реэмитить сообщения от них. Я Вас поздравляю с заслуженной победой :) , однако замечу, что qobjec_cast не имеет ни какого отношения к RTTI, а использует в своей работе Qt-шную метаинформацию, и именно по этому умеет работать только с типами явно или не явно наследованными от QObject-та. Тьфу, начал читать, уж додумывая на ходу: "поздравляю вас... с изобретением давно известного велосипеда" =)) Ладно, значит не RTTI, решил что QTшный работает так же как классический dynamic_cast. |