Всем Здавствовать !
Несколько вопросов по динамическому конструированию UI.
1. Подскажите плз, какой класс построителя динамической формы
( QFormBuilder или QUiLoader ) использовать предпочтительнее ?
В первую очередь интересует минимальный р-р потребляемых ресурсов ОЗУ.
2. Как опросить загруженный файл UI на предмет содержащихся в нём виджетов и
их (динамических) атрибутов ?
Интересует поиск специфических, т.е. предопределённых атрибутов и их значений ...
Заранее благодарен за помощь.
Вопросы закрыты. Разобрался.
Админ, удали тему, плз ...
если не затруднит опиши своё резюме по данной теме, вдруг у кого-то возникнут такие же вопросы.
Ок.
1. Работают они почти одинаково, есть небольшая разница во времени появления построенного диалога на
экране, QUiLoader чуть медленнее, но это субъективно, за-то ему нужно меньше памяти, т.к. его модуль меньше.
2. В случае, если пишете свой "Дизайнер", предпочтительнее использовать QFormBuilder, т.к. в "довесок"
к нему в модуле QT-шного Дизайнера идут класы доступа к элементам Дизайнера QT.
С ними я пока не работал, т.к. свою проблему буду решать другим способом, через "фиксированные"
алиасные имена и реализацией класса который об этих именах осведомлён :-)
3. В проектируемом диалоге формы элементы "получают" алиасные имена из конфигурации.
Подробнее о проекте в ветке "Поиск и выбор узла в QTreeView".
4. Вот реально работающий код, для просмотра формы. Загрузка из QString ...
QString sCode;
QModelIndex index = selectedIndexes().first();
DomItem *item = static_cast<DomItem*>(index.internalPointer());
sCode = item->node().toElement().text();
QUiLoader fLoader;
QByteArray ba = sCode.toUtf8();
QBuffer buf(&ba);
fpForm *Form = (fpForm *) fLoader.load(&buf, this);
buf.close();
Form->initForm(sCode);
// Form->exec(); // По вкусу :-)
Form->show();
return;
После продолжительных экспериментов.
Добавление:
к п.1. QUiLoader к ехе-шнику в добавляет примерно 1 М ( в отладочной версии)
QFormBuilder добавляет 0.2 М, т.е. с размером я ошибся, исправить
месагу не смог.
к п.2 QFormBuilder грузит диалог из файла, а если из буфера, ругается.
Причина ругани определена - ему не хватало buf.open(QIODevice::ReadOnly);
Ту-же форму QUiLoader грузит без вопросов из буфера, как указано в коде п.4.
Все эксперименты в QT 4.5.3 в XP. Позже будет тестироваться в ASP Linux 14
При загрузке формы, как оказалось, у QFormBuilder лежит большая грабля, - он неправильно
именует/создаёт класы виджетов. Т.е. к примеру, если форма в дизайнере "положена" на
QDialog, он создаёт форму почему-то на QStackedWidget соответственно правильно
её распарсить и затем создать проблематично. За QUiLoader-ом пока такого не замечено,
но у него свои "мухи" ...
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)