6.3. Многостраничные виджеты.

Еще один виджет, которые может оказаться полезным, в смысле компоновки -- это QWidgetStack. Он может содержать наборы виджетов, объединяемых в "страницы", и всегда показывает только одну страницу, скрывая остальные. Нумерация страниц начинается с 0. Чтобы сделать определенный подчиненный виджет-страницу видимым, необходимо вызвать функцию raiseWidget(), передав ей либо номер страницы, либо указатель на подчиненный виджет.

Рисунок 6.7. QWidgetStack.


Сам по себе QWidgetStack невидим и не предоставляет никаких дополнительных визуальных элементов, с помощью которых пользователь мог бы переходить от страницы к странице. Маленькие стрелочки и темно-серая рамка, которые вы можете наблюдать на рисунке 6.7, предоставляются визуальным построителем Qt Designer для удобства разработчика.

Рисунок 6.8. Диалог Configure.


Диалог Configure, изображенный на рисунке 6.8, может служить примером использования QWidgetStack. В левой части окна диалога находится QListBox, а в правой -- QWidgetStack. Каждому элементу в QListBox соответствует своя страница в QWidgetStack. Формы подобного рода очень просто создаются в Qt Designer:
  1. Создается новая форма из шаблона "Dialog" или "Widget".

  2. На форму добавляются QListBox и QWidgetStack.

  3. Каждая страница QWidgetStack заполняется необходимыми виджетами. (Чтобы создать новую страницу -- щелкните правой кнопкой мыши и выберите из контекстного меню пункт Add Page. Чтобы перейти к другой странице -- щелкните мышкой по одной из кнопок, расположенных в правом верхнем углу.)

  4. Объедините QListBox и QWidgetStack менеджером горизонтального размещения.

  5. Соедините сигнал highlighted(int), от QListBox, со слотом raiseWidget(int), компонента QWidgetStack.

  6. Установите свойство currentItem (QListBox) равным 0.

Поскольку мы реализовали механизм смены страниц стандартными сигналами и слотами, диалог будет способен выполнять корректный переход от страницы к странице, даже во время предварительного просмотра в Qt Designer.