LINUX.ORG.RU

[Qt] Переключение между виджетами

 


0

0

Требуется таким образом реализовать несколько виджетов, чтобы в каждый момент времени был виден только один из них. Все виджеты долны быть наследниками одного и того же родительского виджета, т.е. рисоваться в одном и том же месте. Создавать и удалять их каждый раз при переключении накладно, посему в голову приходит несколько идей:

* тупо засунуть все виджеты в один layout и всех заhide'ить. Потом show у требуемого.
* сделать всех детьми некоего невидимого виджета, а потом reparent'ить выбранного к видимому.
* сделать QStackedView с невидимыми страницами и засунуть в каждую по виджету и переключать их опять же с помощью hide/show.

Что посоветует многоуважаемый all? Какие есть подводные камни?

★★★★★
Ответ на: комментарий от lester_dev

QPushButton *button1 = new QPushButton("button1");
QPushButton *button2 = new QPushButton("button2");

QStackedLayout *layout = new QStackedLayout;

layout->addWidget(button1);
layout->addWidget(button2);

layout->setCurrentWidget(button2); // активировать 2 кнопку
layout->setCurrentWidget(button1); // активировать 1 кнопку
layout->setCurrentIndex(1); // активировать 2 кнопку
layout->setCurrentIndex(0); // активировать 1 кнопку

Вместо QStackedLayout скорее всего можно использовать QStackedWidget

Devix
()
Ответ на: комментарий от lester_dev

QSstackedWidget и предназначен для твоего случая, см. документацию.

The QStackedWidget class provides a stack of widgets where only one widget is visible at a time.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Да но у него есть мерзкий переключатель, как на QTabWidget, все решилось подсовыванием QStackedLayout родителю.

lester_dev ★★★★★
() автор топика
Ответ на: комментарий от lester_dev

> Ну я не знаю, как так хрень в правом верхнем углу называется, которая позволяет переключаться между активными виджетами.

Она существует только в дизайнере. Смело пользуйте QStackedWidget.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Спасибо, буду знать на будущее, сейчас вполне хватает QStackedLayout.

lester_dev ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.