![]() |
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции | ![]() |
[Предыдущая: Классы работы с текстом Scribe] [Начало] [Следующая: Новый Qt Designer]
Qt 4 предоставляет новый набор классов главного окна, которые превосходят подобные в Qt 3, обеспечивая большую эффективность при сохранении удобства в использовании.
Классы, связанные с главным окном, были полностью переработаны для того, чтобы удовлетворить множеству требований и разрешить проблемы, с которыми столкнулись наши клиенты и внутренние разработчики. Цель данного перепроектирования - обеспечить более последовательную и эффективную структуру управления главным окном.
Qt 4 предоставляет следующие классы для управления главным окном и связанными с ним компонентами пользовательского интерфейса:
Прямое использование QMainWindow. Вообще, мы создаем подклассы QMainWindow и устанавливаем меню, панели инструментов и встроенные виджеты внутри конструктора QMainWindow.
Чтобы добавить панель меню к главному окну, мы просто создаем меню и добавляем его в панель меню главного окна. Обратите внимание, что функция QMainWindow::menuBar() автоматически создает панель меню при первом вызове. Вы также можете вызвать QMainWindow::setMenuBar() для того, чтобы использовать собственное меню в главном окне.
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ... newAct = new QAction(tr("&New"), this); newAct->setShortcut(tr("Ctrl+N")); newAct->setStatusTip(tr("Create a new file")); connect(newAct, SIGNAL(triggered()), this, SLOT(newFile())); openAct = new QAction(tr("&Open..."), this); openAct->setShortcut(tr("Ctrl+O")); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); ...
Как только действия созданы, их можно связать с компонентами главного окна. Для начала добавляем их к выпадающим меню:
fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); ... fileMenu->addSeparator(); ...
Классы QToolBar и QMenu используют систему действий Qt для поддержания последовательного API. В вышеприведенном коде некоторые действия были добавлены в меню с помощью функции QMenu::addAction(). QToolBar также поддерживает эту функцию, облегчая повторное использование действий в различных частях главного окна. Это избавляет от ненужного повторения кода.
Мы создаем дочернее по отношению к главному окну меню и добавляем в него нужные действия:
fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); ...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); addToolBar(Qt::TopToolBarArea, fileToolbar);
В данном примере расположение панели инструментов ограничено верхней и нижней частями главного окна и первоначально она располагается сверху. Мы можем видеть, что действия, определенные как newAct и openAct, будут отображены и в меню, и на панели инструментов.
QDockWidget используется подобно QToolBar. Мы создаем встроенный виджет как дочерний по отношению к главному окну и добавляем в него виджеты, дочерние по отношению к встроенному виджету:
contentsWindow = new QDockWidget(tr("Table of Contents"), this); contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); addDockWidget(Qt::LeftDockWidgetArea, contentsWindow); headingList = new QListWidget(contentsWindow); contentsWindow->setWidget(headingList);
В данном примере месторасположение встроенного виджета ограничено левой и правой областью прикрепляемых виджетов, а первоначально он располагается слева.
API QMainWindow позволяет программисту настраивать, какие встраиваемые виджеты какой угол занимают и как они состыковываются. Если требуется, положение по умолчанию может быть изменено с помощью QMainWindow::setCorner():
setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
Вышеприведенная диаграмма демонстрирует, как изменятся области встраиваемых виджетов после выполнения данного кода. Обратите внимание, что левая и правая область встраиваемых виджетов займет верхние и нижние углы главного окна.
После того, как созданы все компоненты главного окна, приступаем к созданию центрального виджета с помощью следующего кода:
QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget);
Центральный виджет может быть любым из подклассов QWidget.
В Qt 4 в классы главного окна добавлен новый функционал, преимущественно для встроенных виджетов и панели инструментов. Изменения были сделаны также в структуре библиотеки.
Хотя классQMainWindow в Qt 3 обеспечивал поддержку панелей инструментов, встраиваемых виджетов и прочих стандартных компонентов пользовательского интерфейса, это делалось с помощью большого количества функций-членов QMainWindow. В Qt 4 класс QMainWindow передаёт многие из функций управления в QDockWidget и QToolBar. В результате эти классы в Qt 4 используются слегка различными способами.
Классы встроенных виджетов и панели инструментов сейчас разделены на независимые классы. (и не только)
(Это подразумевает, что данные изменения позволят улучшить поведение и расширить возможности (какой? пример). Основываясь на отзывах пользователей, мы надеемся расширить эти классы в будущем.)
Стыковка и перетаскивание из области прикрепления встроенных виджетов теперь анимирована. Область прикрепления теперь также корректирует размер виджетов для отображения, где будет располагаться виджет после перемещения. Анимация может быть отключена с помощью setAnimated().
По умолчанию, встраиваемые виджеты добавляются в область прикрепления в отдельные строки. При установке вложенности с помощью setDockNestingEnabled() виджеты могут быть добавлены как вертикально, так и горизонтально.
Два встраиваемых виджета могут занимать одно и то же место в области прикрепления. Пользователь может выбрать, который виджет будет видимым, с помощью вкладок, которые расположены ниже виджетов. Функция QMainWindow::tabifyDockWidget() соединяет две вкладки виджетов в область прикрепления. (пересмотреть весь абзац)
Функциональные возможности панели инструментов и встроенного окна обеспечиваются двумя независимыми классами: QToolBar и QDockWidget. Панели инструментов и встроенные виджеты располагаются в отдельных областях. Подобное поведение отличается от поведения в Qt 3, где QToolBar наследует функциональные возможности QDockWidget и где компоненты обоих типов располагаются в одних и тех же областях. В результате мы получили более последовательное и предсказуемое поведение. Панели инструментов и встроенные виджеты сохраняют обратную связь в то время, как их перемещают в новую позицию.
Диаграмма, приведенная выше, показывает компоновку главного окна, которое содержит панели инструментов и встроенные виджеты. Каждая из угловых областей может использоваться любой из смежных областей встроенных виджетов, позволяя задавать точное расположение виджетов.
Панели инструментов и встроенные виджеты являются дочерними окнами по отношению к главному окну. Больше нет необходимости удочерять их главным окном. Вместо этого компоновщики используются для управления расположением панелей инструментов и состыковкой виджетов. В результате этого старый класс QDockArea больше не требуется в Qt 4.
QMainWindow продолжает поддерживать функцию menuBar(), но меню всегда строится с использованием объектов QAction. Все виды меню построены с использованием общего класса QMenu.
Qt 3:
QPopupMenu *fileMenu = new QPopupMenu(this); openAction->addTo(fileMenu); saveAction->addTo(fileMenu); ... menuBar()->insertItem(tr("&File"), fileMenu);
Qt 4:
QMenu *fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(openAction); fileMenu->addAction(saveAction); ...
Панели инструментов создаются подобным образом, обеспечивая новое, более последовательное поведение:
Qt 3:
QToolBar *fileTools = new QToolBar(this, "file toolbar"); openAction->addTo(fileTools); saveAction->addTo(fileTools); ...
Qt 4:
QToolBar *fileTools = addToolBar(tr("File Tool Bar")); fileTools->addAction(openAction); fileTools->addAction(saveAction); ...
Поведение встроенных виджетов теперь настраивается с помощью членов-функций класса QDockWidget. Например, сравните старый и новый способы создания встроенного виджета в левой части главного окна.
В Qt 3:
QDockWidget *dockWidget = new QDockWidget(this); mainWin->moveDockWidget(dockWidget, Qt::DockLeft);
В Qt 4:
QDockWidget *dockWidget = new QDockWidget(mainWindow); mainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
[Предыдущая: Классы работы с текстом Scribe] [Начало] [Следующая: Новый Qt Designer]
Copyright © 2008 Trolltech | Торговые марки | Qt 4.3.5 |