Читаем QT 4: программирование GUI на С++ полностью

07 listWidget->addItem(tr("Advanced"));

08 listWidget->addItem(tr("Appearance"));

09 stackedLayout = new QStackedLayout;

10 stacked Layout->addWidget(appearancePage);

11 stackedLayout->addWidget(webBrowserPage);

12 stackedLayout->addWidget(mailAndNewsPage);

13 stackedLayout->addWidget(advancedPage);

14 connect(listWidget, SIGNAL(currentRowChanged(int)).

15 stackedLayout, SLOT(setCurrentIndex(int)));

16 listWidget->setCurrentRow(0);

17 }

Мы создаем QListWidget и заполняем его названиями страниц. Затем мы создаем QStackedLayout и вызываем для каждой страницы функцию addWidget. Мы связываем сигнал спискового виджета currentRowChanged(int) с setCurrentIndex(int) менеджера стековой компоновки для переключения страниц и вызываем функцию спискового виджета setCurrentRow в конце конструктора, чтобы начать со страницы 0.

Подобные формы также очень легко создавать при помощи Qt Designer.

1. Создайте новую форму на основе шаблона «Dialog» или «Widget».

2. Добавьте в форму виджеты QListWidget и QStackedWidget.

3. Заполните каждую страницу дочерними виджетами и менеджерами компоновки. (Для создания новой страницы нажмите на правую кнопку мышки и выберите пункт меню Insert Page (вставить страницу); для перехода с одной страницы на другую щелкните по маленькой левой или правой стрелке, расположенной в верхнем правом углу виджета QStackedWidget.)

4. Расположите виджеты рядом, используя менеджер горизонтальной компоновки.

5. Подсоедините сигнал виджета списка элементов currentRowChanged(int) к слоту стекового виджета setCurrentIndex(int).

6. Установите значение свойства виджета списка элементов currentRow на 0.

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

<p>Разделители</p>

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

Рис. 6.7. Приложение Splitter.

Дочерние виджеты QSplitter автоматически располагаются рядом (или один под другим) в порядке их создания, причем между соседними виджетами размещаются разделительные линии. Ниже приводится программный код для создания представленного на рис. 6.7 окна:

01 int main(int argc, char *argv[])

02 {

03 QApplication app(argc, argv);

04 QTextEdit *editor1 = new QTextEdit;

05 QTextEdit *editor2 = new QTextEdit;

06 QTextEdit *editor3 = new QTextEdit;

07 QSplitter splitter(Qt::Horizontal);

08 splitter.addWidget(editor1);

09 splitter.addWidget(editor2);

10 splitter.addWidget(editor3);

11 splitter.show;

12 return app.exec;

13 }

Этот пример состоит из трех полей редактирования QTextEdit, расположенных горизонтально в виджете QSplitter. В отличие от менеджеров компоновки, которые просто размещают в форме дочерние виджеты, а сами не имеют визуального представления, QSplitter наследует QWidget и может использоваться как любой другой виджет.

Рис. 6.8. Виджеты приложения Splitter.

Можно обеспечить сложную компоновку путем применения вложенных горизонтальных и вертикальных разделителей QSplitter. Например, показанное на рис. 6.9 приложение Mail Client (почтовый клиент) состоит из горизонтального QSplitter, который содержит справа от себя вертикальный QSplitter.

Рис. 6.9. Приложение Mail Client в системе Mac OS X.

Ниже приводится программный код конструктора подкласса QMainWindow приложения Mail Client:

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже