Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Как добавить отдельный UI(QFrame) во время работы программы?

Автор: RazrFalcon 26.7.2011, 19:16

Есть комбобокс, он имеет 4-е значения. В зависимости от того какое значение выбрал пользователь, должен грузится соответствующий QFrame с необходимыми элементами. Все QFrame в отдельных *.ui файлах. И я должен иметь возможность работать с этими элементами.
Как это реализовать?

Автор: ilyabvt 26.7.2011, 23:31

Если я правильно понял суть проблемы то вам нужен класс QUiLoader
http://doc.qt.nokia.com/latest/quiloader.html

Автор: RazrFalcon 27.7.2011, 0:01

Спасибо!
Не знаю на сколько это труЪ, но пашет именно так как мне надо.

Автор: RazrFalcon 27.7.2011, 9:20

Ну грузится он грузится, а вот как получить доступ к элементам формы я не пойму =/
PS: в чем разница между: QUiLoader и QFormBuilder? Вроде одно и тоже.

Автор: ilyabvt 27.7.2011, 11:16

Для доступа к виджетам можно использовать findChild

Раскрывающийся текст




Взято из книги "Qt 4.5. Профессиональное программирование на c++" Макс Шлее

Цитата
в чем разница между: QUiLoader и QFormBuilder?

Цитата
The QFormBuilder class is typically used by custom components and applications that embed Qt Designer. Standalone applications that need to dynamically generate user interfaces at run-time use the QUiLoader class, found in the QtUiTools module.

Я так понял, если тащишь за собой Qt Designer, то лучше QFormBuilder если нет то лучше QUiLoader.

Автор: Litkevich Yuriy 28.7.2011, 13:53

Цитата(RazrFalcon @ 27.7.2011, 12:20) *
а вот как получить доступ к элементам формы я не пойму
Смотри асистент, там есть пример

Автор: vankleef 28.7.2011, 23:31

я вот не понимаю а почему нельзя отследить сигнал комбобокса и показать/создать/удалить форму, которую надо ?

Автор: RazrFalcon 29.7.2011, 0:50

Litkevich Yuriy, нашел - пашет.
vankleef, не понял о чем Вы.

Проблема сейчас другая. Если я создал Qt Designer Form Class, могу ли я в нем прописать нужные мне действия. Я то гружу только сам UI.
То есть, я хочу что бы часть команд (нажатий на некоторые элементы), отрабатывалась в классе виджета.
То есть как будто обычное окно, нормальная реакция на сигналы и тд. Но сам виджет не отдельным окном, а внутри другого. Возможно ли это?

Или мне нужно через findChild найти все объекты виджета, и уже в основном классе программ обрабатывать их сигналы?

PS: Если уж совсем не ясно объяснил, могу выложить мини пример.

Автор: Litkevich Yuriy 29.7.2011, 5:44

Часть работы можно сделать в самом дизайнере (т.е. соединить в нём сигналы и слоты), а то что должно взаимодействовать с внешним миром и просто некая логика внутри виджета, придётся делать в коде и за пределами динамически создаваемого (из ui-файла) виджета.

Автор: RazrFalcon 29.7.2011, 9:49

То есть сам код слотов должен быть в основном коде, который и грузит форму?


PS: то что я пытаюсь сделать, вроде бы, называется "мастер". То есть у меня есть пустое окно с кнопками далее/назад. А все остальные элементы грузятся из внешних форм (*.ui). Возможно есть вариант лучше, чем я делаю сейчас.

Автор: Litkevich Yuriy 29.7.2011, 11:12

Цитата(RazrFalcon @ 29.7.2011, 12:49) *
То есть сам код слотов должен быть в основном коде, который и грузит форму?
не просто код слотов, а сами слоты и соединения их с сигналами от элементов формы

Цитата(RazrFalcon @ 29.7.2011, 12:49) *
то что я пытаюсь сделать, вроде бы, называется "мастер"
А QWizard не подходит?

Автор: RazrFalcon 29.7.2011, 11:21

Ухты! Первый раз услышал о QWizard. Выглядит как обычный инсталер. Попробую и его. Скорее всего то что нужно.
Разве что, как я понял, он заточен только под инсталлер, а мне нужно совсем не инсталер. Как то так.

Автор: Litkevich Yuriy 29.7.2011, 11:32

я не знаю на основе чего ты понял, что он заточен под инсталлер. Это просто каркас для разработки мастеров/помошников.

почитай http://wiki.crossplatform.ru/index.php/The_Wizard_Magically_Reappears

Автор: RazrFalcon 29.7.2011, 17:40

Именно то что нужно, спасибо.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)