crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
bobdva
  опции профиля:
сообщение 2.10.2008, 21:21
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Загрузить форму в runtime из ui-файла можно при помощи QUiLoader.
Есть два ui-файла, в одном описан один компонент, в другом компонент, в котором требуется использовать widget, описанный в первом файле.

Как это можно описать в соответствии c форматом ui-файла, и как это можно загрузить в runtime (без предкомпиляции ui в h/cpp)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.10.2008, 21:40
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   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
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Тогда нужны подробности, почему и прочее...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.10.2008, 21:59
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


bobdva, рекомендую сделать наипростейший проект и выложить его

P.S. Пожалуйста не цитируй сообщения целиком если они большие, выдели интерисующий текст и нажми "++ЦИТАТА"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 2.10.2008, 22:00
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 2.10.2008, 22:54) *
Тогда нужны подробности, почему и прочее...

хочется иметь возможность изменять формы без необходимости перекомпиляции и при этом использовать компоненты несколько раз.
т.е. есть, например, simpleForm.ui - простая форма, которая должна быть использована как в simpleDialog1.ui, так и в simpleDialog2.ui, которые отличаются ещё между собой чем-то, но содержат одну и ту же simpleForm.
надеюсь понятно объяснил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.10.2008, 22:01
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


читай мой пост
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 2.10.2008, 22:02
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 2.10.2008, 22:59) *
bobdva, рекомендую сделать наипростейший проект и выложить его

простейший проект, где из main.cpp грузится simpleForm.ui сделал - ибо всё просто, но как сделать именно с включением одного в ui внутрь другого, и уже его динамечески загрузить в runtime - не могу даже подступиться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.10.2008, 22:07
Сообщение #9


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А не проще ли без ui файлов обойтись?
Все можно создавать и на лету, без ui файлов, описав лишь нужные действия в классах и не более того. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 2.10.2008, 22:10
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 2.10.2008, 23:07) *
А не проще ли без ui файлов обойтись?

требования, что описание должно быть внешним, которое можно как-то быстро менять (qt designer, например), а делать свой велосипед по загрузке этого внешнего описания не хотелось.

Цитата(bobdva @ 2.10.2008, 23:09) *
требования, что описание должно быть внешним, которое можно как-то быстро менять (qt designer, например), а делать свой велосипед по загрузке этого внешнего описания не хотелось.

описание графических диалогов/форм/компонент
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.10.2008, 22:14
Сообщение #11


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Посмотри пример: Calculator Builder Example.
Кажется то, что тебе нужно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 2.10.2008, 22:19
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 2.10.2008, 23:14) *
Кажется то, что тебе нужно...

извините, но нет, не то, что мне нужно - это только первый шаг по загрузке формы из ui файла. И это сделано и работает успешно.
Задача несколько по иному стоит - загрузить ui, в который загружается ещё один ui и это всё в runtime
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.10.2008, 22:29
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(bobdva @ 2.10.2008, 23:19) *
загрузить ui, в который загружается ещё один ui и это всё в runtime
Извини, до этого не до конца понял, спать уже пора ложиться. :)
Если я правильно понял тебя сайчас, то тебе нужно загрузить сразу два ui, как в примере. И при загрузке второго ui в качестве родителя указать виджет из первого ui.

Если и сейчас я не правильно понял, то пойду спать... :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.10.2008, 22:32
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


bobdva, выкладывай исходники того что есть, суй в тэг [code=cpp][/code] будем смотреть, подскажим
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 3.10.2008, 10:15
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(bobdva @ 3.10.2008, 14:15) *
говоря включения (include, но не include в терминах cpp/h) ui внутрь другого ui
помоему непосредственно так сделать нельзя
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 3.10.2008, 14:26
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 3.10.2008, 14:48) *
помоему непосредственно так сделать нельзя

да, судя по всему, стандартными средствами никак, но можно сделать свой компонент (расширяющий QWidget), который будет принимать св-во с указанием имени файла и вот уже его грузить через UiLoader

уже почти сделал, но есть некоторые шероховатости - как доделаю - выложу код.
и всем спасибо :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.10.2008, 14:32
Сообщение #18


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(bobdva @ 3.10.2008, 15:26) *
как доделаю - выложу код.
Будем ждать.
А если его немного оформишь описанием, то можно выложить на сайт в раздел Qt Исходники... ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.10.2008, 14:50
Сообщение #19


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ViGOur, лучше в вику
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 3.10.2008, 14:54
Сообщение #20


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Litkevich Yuriy @ 3.10.2008, 15:50) *
ViGOur, лучше в вику
Смотря как будет оформлено, в виде статьи в вику в виде исходников с их описание на сайт...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bobdva
  опции профиля:
сообщение 3.10.2008, 15:41
Сообщение #21


Студент
*

Группа: Участник
Сообщений: 29
Регистрация: 2.10.2008
Из: Москва
Пользователь №: 377

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 3.10.2008, 15:32) *
Цитата(bobdva @ 3.10.2008, 15:26) *
как доделаю - выложу код.
Будем ждать.
А если его немного оформишь описанием, то можно выложить на сайт в раздел Qt Исходники... ;)

уф... что-то вот наклепал и выложил у себя в блог:
Qt4: dynamic loading ui from an other ui
жду комментарии и замечания, и наверно можно будет в более лучшем виде положить в раздел Qt Исходники
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 3.10.2008, 16:41
Сообщение #22


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


исходники можно на сайт, а статью можно в вику, и ссылку на сайт где исходнки. В вике можно писать неспеша в своей песочнице.

тему разделил свой custom widget
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 23.6.2025, 23:44