Версия для печати темы
Форум на CrossPlatform.RU _ Qt инструментарий _ Загрузка UI из другого UI
Автор: bobdva 2.10.2008, 21:21
Загрузить форму в runtime из ui-файла можно при помощи QUiLoader.
Есть два ui-файла, в одном описан один компонент, в другом компонент, в котором требуется использовать widget, описанный в первом файле.
Как это можно описать в соответствии c форматом ui-файла, и как это можно загрузить в runtime (без предкомпиляции ui в h/cpp)
Автор: ViGOur 2.10.2008, 21:40
Если я правильно понял по поводу QUiLoader в ассистенте, то это делается по аналогии с AnalogClock:
QWidget *loadCustomWidget(QWidget *parent)
{
QUiLoader loader;
QWidget *myWidget;
QStringList availableWidgets = loader.availableWidgets();
if (availableWidgets.contains("AnalogClock"))
myWidget = loader.createWidget("AnalogClock", parent);
return myWidget;
}
Автор: bobdva 2.10.2008, 21:43
Цитата(ViGOur @ 2.10.2008, 22:40)
Если я правильно понял по поводу QUiLoader в ассистенте, то это делается по аналогии с AnalogClock:
QWidget *loadCustomWidget(QWidget *parent)
{
QUiLoader loader;
QWidget *myWidget;
QStringList availableWidgets = loader.availableWidgets();
if (availableWidgets.contains("AnalogClock"))
myWidget = loader.createWidget("AnalogClock", parent);
return myWidget;
}
в том-то и проблема, что требуемый widget не находится в availableWidgets
Автор: ViGOur 2.10.2008, 21:54
Тогда нужны подробности, почему и прочее...
Автор: Litkevich Yuriy 2.10.2008, 21:59
bobdva, рекомендую сделать наипростейший проект и выложить его
P.S. Пожалуйста не цитируй сообщения целиком если они большие, выдели интерисующий текст и нажми "++ЦИТАТА"
Автор: bobdva 2.10.2008, 22:00
Цитата(ViGOur @ 2.10.2008, 22:54)
Тогда нужны подробности, почему и прочее...
хочется иметь возможность изменять формы без необходимости перекомпиляции и при этом использовать компоненты несколько раз.
т.е. есть, например, simpleForm.ui - простая форма, которая должна быть использована как в simpleDialog1.ui, так и в simpleDialog2.ui, которые отличаются ещё между собой чем-то, но содержат одну и ту же simpleForm.
надеюсь понятно объяснил
Автор: Litkevich Yuriy 2.10.2008, 22:01
читай мой пост
Автор: bobdva 2.10.2008, 22:02
Цитата(Litkevich Yuriy @ 2.10.2008, 22:59)
bobdva, рекомендую сделать наипростейший проект и выложить его
простейший проект, где из main.cpp грузится simpleForm.ui сделал - ибо всё просто, но как сделать именно с включением одного в ui внутрь другого, и уже его динамечески загрузить в runtime - не могу даже подступиться.
Автор: ViGOur 2.10.2008, 22:07
А не проще ли без ui файлов обойтись?
Все можно создавать и на лету, без ui файлов, описав лишь нужные действия в классах и не более того.
Автор: bobdva 2.10.2008, 22:10
Цитата(ViGOur @ 2.10.2008, 23:07)
А не проще ли без ui файлов обойтись?
требования, что описание должно быть внешним, которое можно как-то быстро менять (qt designer, например), а делать свой велосипед по загрузке этого внешнего описания не хотелось.
Цитата(bobdva @ 2.10.2008, 23:09)
требования, что описание должно быть внешним, которое можно как-то быстро менять (qt designer, например), а делать свой велосипед по загрузке этого внешнего описания не хотелось.
описание графических диалогов/форм/компонент
Автор: ViGOur 2.10.2008, 22:14
Посмотри пример: http://www.crossplatform.ru/documentation/qtdoc4.3/designer-calculatorbuilder.php.
Кажется то, что тебе нужно...
Автор: bobdva 2.10.2008, 22:19
Цитата(ViGOur @ 2.10.2008, 23:14)
Кажется то, что тебе нужно...
извините, но нет, не то, что мне нужно - это только первый шаг по загрузке формы из ui файла. И это сделано и работает успешно.
Задача несколько по иному стоит - загрузить ui, в который загружается ещё один ui и это всё в runtime
Автор: ViGOur 2.10.2008, 22:29
Цитата(bobdva @ 2.10.2008, 23:19)
загрузить ui, в который загружается ещё один ui и это всё в runtime
Извини, до этого не до конца понял, спать уже пора ложиться.
Если я правильно понял тебя сайчас, то тебе нужно загрузить сразу два ui, как в примере. И при загрузке второго ui в качестве родителя указать виджет из первого ui.
Если и сейчас я не правильно понял, то пойду спать...
Автор: Litkevich Yuriy 2.10.2008, 22:32
bobdva, выкладывай исходники того что есть, суй в тэг [code=cpp][/code] будем смотреть, подскажим
Автор: bobdva 3.10.2008, 10:15
Цитата(ViGOur @ 2.10.2008, 23:29)
Если я правильно понял тебя сайчас, то тебе нужно загрузить сразу два ui, как в примере. И при загрузке второго ui в качестве родителя указать виджет из первого ui.
почти, но не совсем то.
Логика загрузки грузит только один ui - она не знает, будет ли он грузить другой ui, один ui, или вообще несколько.
хочется грубо говоря включения (include, но не include в терминах cpp/h) ui внутрь другого ui
Автор: Litkevich Yuriy 3.10.2008, 13:48
Цитата(bobdva @ 3.10.2008, 14:15)
говоря включения (include, но не include в терминах cpp/h) ui внутрь другого ui
помоему непосредственно так сделать нельзя
Автор: bobdva 3.10.2008, 14:26
Цитата(Litkevich Yuriy @ 3.10.2008, 14:48)
помоему непосредственно так сделать нельзя
да, судя по всему, стандартными средствами никак, но можно сделать свой компонент (расширяющий QWidget), который будет принимать св-во с указанием имени файла и вот уже его грузить через UiLoader
уже почти сделал, но есть некоторые шероховатости - как доделаю - выложу код.
и всем спасибо
Автор: ViGOur 3.10.2008, 14:32
Цитата(bobdva @ 3.10.2008, 15:26)
как доделаю - выложу код.
Будем ждать.
А если его немного оформишь описанием, то можно выложить на сайт в раздел http://crossplatform.ru/?q=taxonomy/term/65...
Автор: Litkevich Yuriy 3.10.2008, 14:50
ViGOur, лучше в вику
Автор: ViGOur 3.10.2008, 14:54
Цитата(Litkevich Yuriy @ 3.10.2008, 15:50)
ViGOur, лучше в вику
Смотря как будет оформлено, в виде статьи в вику в виде исходников с их описание на сайт...
Автор: bobdva 3.10.2008, 15:41
Цитата(ViGOur @ 3.10.2008, 15:32)
Цитата(bobdva @ 3.10.2008, 15:26)
как доделаю - выложу код.
Будем ждать.
А если его немного оформишь описанием, то можно выложить на сайт в раздел http://crossplatform.ru/?q=taxonomy/term/65...
уф... что-то вот наклепал и выложил у себя в блог:
http://dolzhenko.blogspot.com/2008/10/qt4-dynamic-loading-ui-from-other-ui.html
жду комментарии и замечания, и наверно можно будет в более лучшем виде положить в раздел http://crossplatform.ru/?q=taxonomy/term/65
Автор: Litkevich Yuriy 3.10.2008, 16:41
исходники можно на сайт, а статью можно в вику, и ссылку на сайт где исходнки. В вике можно писать неспеша в своей песочнице.
тему разделил http://www.forum.crossplatform.ru/index.php?showtopic=1399
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)