Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

10 scrollArea.setWindowTitle(QObject::tr("Icon Editor"));

11 scrollArea.show;

12 return app.exec;

13 }

Рис. 6.12. Изменение размеров области с прокруткой QScrollArea.

QScrollArea при отображении виджета использует его текущий или идеальный размер, если размеры виджета еще ни разу не изменялись. Делая вызов setWidgetResizable(true),

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

По умолчанию полосы прокрутки видны на экране только в том случае, когда область отображения меньше дочернего виджета. Мы можем сделать полосы прокрутки постоянно видимыми при помощи установки следующих политик полос прокрутки:

scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

QScrollArea большую часть своей функциональности наследует от QAbstractScrollArea. Такие классы, как QTextEdit и QAbstractItemView (базовый класс для классов отображения элементов в Qt), являются производными от QAbstractScrollArea, поэтому нам не надо для них формировать оболочку из QScrollArea для получения полос прокрутки.

Прикрепляемые виджеты и панели инструментов

Прикрепляемыми являются виджеты, которые могут крепиться к определенным областям главного окна приложения QMainWindow или быть независимыми «плавающими» окнами. QMainWindow имеет четыре области крепления таких виджетов: одна сверху, одна снизу, одна слева и одна справа от центрального виджета. В таких приложениях, как Microsoft Visual Studio и Qt Linguist, широко используются прикрепляемые окна для обеспечения очень гибкого интерфейса пользователя. В Qt прикрепляемые виджеты представляют собой экземпляры класса QDockWidget.

Каждый прикрепляемый виджет имеет свой собственный заголовок, даже когда он прикреплен. Пользователи могут перемещать прикрепляемые окна с одного места крепления на другое, передвигая полосу заголовка. Они могут также отсоединять прикрепляемое окно от области крепления и сделать его независимым плавающим окном, располагая прикрепляемое окно вне областей крепления. Свободные плавающие прикрепляемые окна всегда находятся «поверх» их главного окна. Пользователи могут закрыть QDockWidget, щелкая по кнопке закрытия, расположенной в заголовке виджета. Любые комбинации этих возможностей можно отключать с помощью вызова QDockWidget::setFeatures.

Рис. 6.13. QMainWindow с прикрепленным виджетом.

В ранних версиях Qt панели инструментов рассматривались как прикрепляемые виджеты, использующие те же самые области крепления. Начиная с Qt 4 панели инструментов размещаются в собственных областях, расположенных по периметру центрального виджета (как показано на рис. 6.14), и они не могут открепляться. Если требуется иметь плавающую панель инструментов, можно просто поместить ее внутрь QDockWindow.

Рис. 6.14.

Области крепления виджетов и области панелей инструментов QMainWindow.

Углы, обозначенные пунктирными линиями, могут принадлежать обеим соседним областям крепления. Например, мы могли бы верхний левый угол назначить левой области крепления с помощью вызова QMainWindow::setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea).

Следующий фрагмент программного кода показывает, как для существующего виджета (в данном случае для QTreeWidget) можно оформить оболочку в виде QDockWidget и вставить ее в правую область крепления:

QDockWidget *shapesDockWidget = new QDockWidget(tr("Shapes"));

shapesDockWidget->setWidget(treeWidget);

shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea

| Qt::RightDockWidgetArea);

addDockWidget(Qt::RightDockWidgetArea, shapesDockWidget);

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

Ниже приводится фрагмент из конструктора подкласса QMainWindow, который показывает, как можно создавать панель инструментов, содержащую QComboBox, QSpinBox и несколько кнопок QToolButton:

QToolBar *fontToolBar = new QToolBar(tr("Font"));

fontToolBar->addWidget(familyComboBox);

fontToolBar->addWidget(sizeSpinBox);

fontToolBar->addAction(boldAction);

fontToolBar->addAction(italicAction);

fontToolBar->addAction(underlineAction);

fontToolBar->setAllowedAreas(Qt::TopToolBarArea

| Qt::BottomToolBarArea);

addToolBar(fontToolBar);

Если мы хотим сохранять позиции всех прикрепляемых виджетов и панелей инструментов, чтобы иметь возможность их восстановления при следующем запуске приложения, мы можем написать почти такой же программный код, как для сохранения состояния разделителя QSplitter, используя функции класса QMainWindow saveState и restoreState:

01 void MainWindow::writeSettings

02 {

03 QSettings settings("Software Inc.", "Icon Editor");

04 settings.beginGroup("mainWindow");

05 settings.setValue("size", size);

06 settings.setValue("state", saveState);

07 settings.endGroup;

08 }

09 void MainWindow::readSettings

10 {

11 QSettings settings("Software Inc.", "Icon Editor");

Поделиться:
Популярные книги

Я спас СССР! том 2

Вязовский Алексей
2. Я спас СССР
Фантастика:
альтернативная история
5.62
рейтинг книги
Я спас СССР! том 2

Старый, но крепкий

Крынов Макс
1. Культивация без насилия
Фантастика:
рпг
уся
попаданцы
5.00
рейтинг книги
Старый, но крепкий

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Некромант на страже человечества. Том 5

Клеванский Никита
5. Некромант на страже человечества
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Некромант на страже человечества. Том 5

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Большая книга о новой жизни, которую никогда не поздно начать (сборник)

Норбеков Мирзакарим Санакулович
Дом и Семья:
здоровье и красота
5.00
рейтинг книги
Большая книга о новой жизни, которую никогда не поздно начать (сборник)

Моров. Том 4

Кощеев Владимир
3. Моров
Фантастика:
фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 4

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

Кодекс Императора IV

Сапфир Олег
4. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора IV

Гримуар темного лорда III

Грехов Тимофей
3. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда III

Настольная книга по теологии. Библейский комментарий АСД Том 12

Церковь христиан адвентистов седьмого дня
Научно-образовательная:
религиоведение
5.00
рейтинг книги
Настольная книга по теологии. Библейский комментарий АСД Том 12

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Проклятый Лекарь. Том 2

Молотов Виктор
2. Анатомия Тьмы
Фантастика:
фэнтези
попаданцы
7.00
рейтинг книги
Проклятый Лекарь. Том 2