Описание класса QMainWindow
|
|
|
Класс QMainWindow предоставляет главное окно приложения.
Главное окно предоставляет структуру для создания пользовательского интерфейса приложения. Qt имеет класс QMainWindow и связанные с ним классы для управления главным окном. QMainWindow имеет собственный компоновщик, в который вы можете добавлять QToolBar'ы, QDockWidget'ы, QMenuBar, и QStatusBar. Компоновщик имеет центральную область, которая может быть занята любым виджетом. Вы можете увидеть изображение компоновщика ниже.
Замечание: Создание главного окна без центрального виджета не поддерживается. Вы должны иметь центральный виджет даже если это просто «заполнитель».
Центральный виджет, обычно, представляет собой стандартный виджет Qt, такой как QTextEdit или QGraphicsView. Пользовательские виджеты могут быть использованы для расширенных приложений. Вы устанавливаете центральный виджет с помощью функции setCentralWidget().
Главное окно имеет или однодокументный (ОДИ, англ. SDI - single document interface) или многодокументный (МДИ, англ. MDI - multiple document interface) интерфейс. Вы создаёте МДИ приложение, используя QMdiArea в качестве центрального виджета.
Теперь мы рассмотрим каждый из виджетов, которые могут быть добавлены в главное окно. Мы приводим примеры того, как создавать и добавлять их.
Qt реализует меню в классе QMenu и QMainWindow хранит их в QMenuBar. QAction'ы (действия) добавляются в меню, которое отображает их как элементы меню.
Вы можете добавить новое меню на панель меню главного окна, взывая функцию menuBar(), которая вернет QMenuBar для окна, и, затем, добавить меню с помощью функции QMenuBar::addMenu().
QMainWindow уже содержит панель меню по умолчанию, но вы можете добавить свою панель с помощью функции setMenuBar(). Если вы хотите реализовать собственную панель меню (т.е.., не используя виджет QMenuBar), вы можете установить её с помощью функции setMenuWidget().
Следующий пример о том, как создать меню:
void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); fileMenu->addAction(saveAct);
Функция createPopupMenu() создает всплывающие меню, когда главное окно принимает события контекстного меню. Реализация по умолчанию, генерирует меню с отмечаемыми действиями на основе прикрепляемых виджетов и панелей инструментов. Вы можете переопределить createPopupMenu() для своего меню.
Панель инструментов реализована в классе QToolBar. Вы можете добавить панель инструментов в главное окно с помощью функции addToolBar().
Вы управляете начальным положением панели инструментов, задавая ей определённое значение Qt::ToolBarArea. Вы можете разделить область, вставляя разрыв панели инструментов (toolbar break) - думайте о нём как о переводе строки при редактировании текста - с помощью функций addToolBarBreak() или insertToolBarBreak(). Вы можете также ограничить размещение панели пользователем, с помощью QToolBar::setAllowedAreas() и QToolBar::setMovable().
Размер иконок панели инструментов может быть найден с помощью iconSize(). Размер - платформозависимый; вы можете установить фиксированный размер с помощью функции setIconSize(). Вы можете изменять внешний вид всех кнопок на панели инструментов с помощью функции setToolButtonStyle().
Ниже приведен пример создания панели инструментов:
void MainWindow::createToolBars() { fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct);
Прикрепляемые виджеты реализованы в классе QDockWidget. Прикрепляемый виджет - это окно, которое может быть прикреплено в главном окне. Вы можете добавить прикрепляемый виджет с помощью функции addDockWidget().
Имеется четыре зоны для размещения прикрепляемых виджетов, которые определяются перечислением Qt::DockWidgetArea: слева, справа, сверху и снизу. [FIXME]You can specify which dock widget area that should occupy the corners where the areas overlap with setCorner(). По умолчанию каждая область может иметь только один ряд (вертикальный или горизонтальный) прикрепляемых виджетов, но если вы разрешите наложение (nesting) с помощью setDockNestingEnabled(), прикрепляемые виджеты будут добавляться в любом направлении.
Два прикрепляемых виджета могут быть также наложены друг на друга. Затем используется QTabBar, чтобы выбрать виджет, который должен быть отображен.
Мы приводим пример, как создавать и добавлять прикрепляемые виджеты в главном окне:
QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this); dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); dockWidget->setWidget(dockWidgetContents); addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
Вы можете установить строку состояния с помощью setStatusBar(), но одна создаётся при первом вызове функции statusBar() (которая возвращает строку состояния главного окна). Как её использовать, смотрите QStatusBar.
QMainWindow может сохранить состояние своей компоновки с помощью saveState(); позже, можно восстановить состояние с помощью restoreState(). Будут сохранены позиции и размеры (относительно размера главного окна) панелей инструментов и прикрепляемых виджетов.
Смотрите также QMenuBar, QToolBar, QStatusBar, QDockWidget, Application Example, Dock Widgets Example, MDI Example, SDI Example, и Menus Example.
Данное перечисление содержит флаги, которые определяют поведение прикрепляемых виджетов QMainWindow.
Константа | Значение | Описание |
---|---|---|
QMainWindow::AnimatedDocks | 0x01 | Идентично свойству animated. |
QMainWindow::AllowNestedDocks | 0x02 | Идентично свойству dockNestingEnabled. |
QMainWindow::AllowTabbedDocks | 0x04 | Пользователь может поместить один прикрепляемый виджет поверх другого. Два виджета накладываются (stacked) и появляется панель вкладок, для выбора отображения одного из них. |
QMainWindow::ForceTabbedDocks | 0x08 | Каждая область прикрепления содержит один набор прикрепляемых виджетов со вкладками. Другими словами, прикрепляемые виджеты не могут располагаться рядом с друг другом. Если этот флаг установлен, то флаг AllowNestedDocks не имеет никакого эффекта. |
QMainWindow::VerticalTabs | 0x10 | Две вертикальные области прикрепления, по (обеим) сторонам главного окна, отображают свои вкладки вертикально. Если этот флаг не установлен, все области прикрепления отображают их вкладки снизу. Предполагает AllowTabbedDocks. |
Эти флаги упраляют только тем, как прикрепляемые виджеты могут быть помещены в QMainWindow. Они не могут преобразовать прикрепляемые виджеты чтобы привести в соответствие заданным параметрам. По этой причине, они должны быть установлены до того, как любые прикрепляемые виджеты будут добавлены в главное окно. Исключением из этого являются флаги AnimatedDocks и VerticalTabs, которые могут быть установлены в любое время.
Данное перечисление было введено в Qt 4.3.
Тип DockOptions - это typedef для QFlags<DockOption>. Он хранит комбинацию значений (по ИЛИ) для DockOption.
Это свойство указывает, являются ли действия с прикрепляемыми виджетами или панелями инструментов анимироваными.
Когда прикрепляемый виджет или панель инструментов перетаскиваются по главному окну, главное окно регулирует их содержимое, чтобы показать, где прикрепляемый виджет или панель инструментов будут прикреплены, если их отпустить. Установка этого свойства заставит QMainWindow перемещать его содержимое с плавной анимацией. Сброс этого свойства заставит содержимое прилипать к своему новому положению.
По умолчанию, это свойство установлено. Оно может быть сброшено, если главное окно содержит виджеты, которые медленно изменяют свои размеры или перерисовываются.
Установка этого свойства идентична установке флага AnimatedDocks помощью функции setDockOptions().
Это свойство было введено в Qt 4.2.
Функции доступа:
Это свойство указывает, могут ли прикрепляемые виджеты быть вложены (nested).
Если это свойство равно false, то области прикрепления могут содержать только один ряд (горизонтальный или вертикальный) прикрепляемых виджетов. Если свойство равно true, то область, занимаемая прикрепляемым виджетом, может быть разделена в одном из направлений, чтобы вместить в себя больше виджетов.
Вложенность прикрепляемых виджетов необходима в приложениях, которые содержат много прикрепляемых виджетов. Это дает пользователю больше свободы в организации главного окна. Тем не менее, вложенность ведёт к более сложному (и менее интуитивному) поведению, когда прикрепляемый виджет перетаскивается по главному окну, так как существует множество путей, в которых отпускаемый виджет может быть помещён в области прикрепления.
Установка этого свойства идентична установке флага AllowNestedDocks с помощью функции setDockOptions().
Это свойство было введено в Qt 4.2.
Функции доступа:
Это свойство указывает поведение прикрепления QMainWindow.
Значение по умолчанию равно AnimatedDocks | AllowTabbedDocks.
Это свойство было введено в Qt 4.3.
Функции доступа:
Это свойство определяет размер значков на панели инструментов в этом главном окне.
По умолчанию устанавливается умалчиваемый размер стиля ГПИ (GUI). Заметьте, что используемые значки должны быть, по меньшей мере, этого же размера, так как значки масштабируются только в сторону уменьшения.
Функции доступа:
Это свойство определяет стиль кнопок на панели инструментов в этом главном окне.
По умолчанию равно Qt::ToolButtonIconOnly.
Функции доступа:
Это свойство описывает, использует ли главное окно унифицированный вид (unified look) заголовка и панели инструментов на Mac OS X.
По умолчанию это свойство равно false и имеет смысл только для Mac OS X 10.4 и выше.
Если равно true, тогда верхняя область панели инструментов заменяется на Carbon HIToolbar и все панели инструментов верхней области перемещаются в эту. Любые панели инструментов, добавленные впоследствии, будут также добавлены в Carbon HIToolbar. Это означает несколько вещей.
Возврат к значению false удалит все эти ограничения.
Флаг Qt::WA_MacBrushedMetal имеет приоритет над этим свойством.
Это свойство было введено в Qt 4.3.
Функции доступа:
Конструирует QMainWindow с родителем parent и определенными флагами flags.
Уничтожает главное окно.
Добавляет заданный прикрепляемый виджет (dockwidget) в определённую область area.
Это перегруженная функция, предоставленная для удобства.
Добавляет прикрепляемый виджет dockwidget в заданную область area в направлении, задаваемом orientation.
Добавляет панель инструментов toolbar в определённую область area, главного окна. Панель toolbar размещается в конце текущего блока панелей (т.е. строки) Если панель toolbar уже находится под управлением главного окна, то она только переместится в область area.
Смотрите также insertToolBar(), addToolBarBreak(), и insertToolBarBreak().
Это перегруженная функция, предоставленная для удобства.
Эквивалентно вызову addToolBar(Qt::TopToolBarArea, toolbar)
Это перегруженная функция, предоставленная для удобства.
Создаёт объект QToolBar, устанавливая его заголовок в title, и вставляет его в верхнюю область панелей инструментов.
Смотрите также setWindowTitle().
Добавляет разрыв панели инструментов в заданную область area после всех других объектов, присутствующих в данный момент.
Возвращает центральный виджет главного окна. Эта функция вернёт ноль, если центральный виджет не был установлен.
Смотрите также setCentralWidget().
Возвращает область прикрепления, которая занимает указанный угол corner.
Смотрите также setCorner().
Возвращает всплывающее меню, содержащее отмечаемые записи для панелей инструментов и прикрепляемых виджетов имеющиеся в главном окне. Если панели инструментов и прикрепляемые виджеты отсутствуют, эта функция возвращает нулевой указатель.
По умолчанию, эта функция вызывается главным окном, когда пользователь активирует контекстное меню, обычно щелчком правой кнопкой мыши на панели инструментов или прикрепляемом виджете.
Если вы хотите создать собственное всплывающее меню, переопределите эту функцию и верните вновь созданное всплывающее меню. Владение выпадающим меню передается вызвавшему объекту.
Смотрите также addDockWidget(), addToolBar(), и menuBar().
Возвращает область Qt::DockWidgetArea, в которой содержится dockwidget. Если dockwidget не был добавлен в главное окно, эта функция вернет Qt::NoDockWidgetArea.
Смотрите также addDockWidget(), splitDockWidget(), и Qt::DockWidgetArea.
Этот сигнал посылается, когда изменяется размер значков, использующихся в окне. Новый размер значков передается в iconSize.
Вы можете соединить этот сигнал с другими компонентами, чтобы помочь вашему приложению сохранять надлежащий вид.
Смотрите также setIconSize().
Вставляет панель инструментов toolbar перед панелью before, в область, занимаемую панелью before. Например, если принято размещать элементы слева направо, то toolbar будет размещена слева от панели инструментов before, в горизонтальной области.
Смотрите также insertToolBarBreak(), addToolBar(), и addToolBarBreak().
Вставляет разрыв перед панелью before.
Возвращает панель меню для главного окна. Эта функция создает и возвращает пустую панель меню, если панель не существует.
Если вы хотите, чтобы все окна в Mac-приложении использовали общую панель меню, не используйте эту функцию, чтобы создавать её, потому что панель меню, созданная здесь будет иметь этот экземпляр QMainWindow в качестве родителя. Вместо этого, вы должны создать панель меню не имеющую родителя, которую вы можете, затем, сделать общей среди всех Mac-окон. Создайте панель меню без родителя таким способом:
QMenuBar *menuBar = new QMenuBar(0);
Смотрите также setMenuBar().
Возвращает панель меню для главного окна. Эта функция возвращает null, если панель меню еще не создана.
Эта функция была введена в Qt 4.2.
Смотрите также setMenuWidget().
Удаляет dockwidget из компоновщика главного окна и скрывает его. Заметьте, что dockwidget не удаляется.
Удаляет панель инструментов toolbar из компоновщика главного окна и скрывает его. Заметьте, что toolbar не удаляется.
[FIXME] Удаляет разрыв панели инструментов, вставленный перед панелью before.
Восстанавливает состояние dockwidget, если он создан после вызова функции restoreState(). Возвращает true, если состояние было восстановлено; в противном случае возвращает false.
Восстанавливает состояние state панелей инструментов и прикрепляемых виджетов этого главного окна. Номер версии (version) сравнивается с тем, что сохранен в state. Если они не соответствуют, состояние главного окна остаётся неизменным, и эта функция вернёт false; в противном случае, состояние восстанавливается, и эта функция вернёт true.
Смотрите также saveState().
Сохраняет текущее состояние панелей инструментов и прикрепляемых виджетов главного окна. Номер версии (version) сохраняется как часть данных.
Свойство objectName используется для идентификации каждого QToolBar и QDockWidget. Вы должны быть уверены, что это свойство уникально для каждого QToolBar'а и QDockWidget'а, которые вы добавляете в QMainWindow
Для восстановления сохраненного состояния, передайте возвращённое значение и номер версии (version) в функцию restoreState().
Смотрите также restoreState().
Устанавливает заданный виджет (widget), в качестве центрального виджета главного окна.
Замечание: QMainWindow становится владельцем объекта, на который указывает widget, и удаляет его в соответствующий момент.
Смотрите также centralWidget().
Устанавливает заданную область (area) прикрепления виджета, чтобы занять указанный угол corner.
Смотрите также corner().
Устанавливает в главном окне панель меню menuBar.
Замечание: QMainWindow становится владельцем объекта, на который указывает menuBar, и удаляет его в соответствующий момент.
Смотрите также menuBar().
Устанавливает в главном окне панель меню menuBar.
QMainWindow становится владельцем объекта, на который указывает menuBar, и удаляет его в соответствующий момент.
Эта функция была введена в Qt 4.2.
Смотрите также menuWidget().
Устанавливает в главном окне строку состояния statusbar.
Установка строки состояния в 0 удалит её из главного окна. Замечание: QMainWindow становится владельцем объекта, на который указывает statusbar, и удаляет его в соответствующий момент.
Смотрите также statusBar().
Разделяет пространство, охватываемое прикрепляемым виджетом first на две части, перемещает прикрепляемый виджет first в первую часть, а прикрепляемый виджет second во вторую часть.
Аргумент orientation определяет, как разделяется пространство: Qt::Horizontal разделяет пространство второго виджета справа от первого; Qt::Vertical разделяет пространство второго виджета ниже первого.
Замечание: если first в данный момент прикреплен в виде вкладки, то second будет добавлен как новая вкладка, а не как сосед виджета first. Это происходит из-за того, что одна вкладка может содержать только один прикрепляемый виджет.
Замечание: Qt::LayoutDirection влияет на порядок расположения прикрепляемых виджетов в двух частях разделённой области. Когда разрешена компоновка с расположением справа налево, размещение прикрепляемых виджетов осуществляется в обратную сторону.
Смотрите также tabifyDockWidget(), addDockWidget(), и removeDockWidget().
Возвращает строку состояния главного окна. Эта функция создает и возвращает пустую строку состояния, если она не существует.
Смотрите также setStatusBar().
Помещает прикрепляемый виджет second над виджетом first, создавая в главном окне область прикрепления со вкладками.
Возвращает Qt::ToolBarArea для toolbar. Если панель toolbar не была добавлена в главное окно, эта функция вернет Qt::NoToolBarArea.
Смотрите также addToolBar(), addToolBarBreak(), и Qt::ToolBarArea.
Возвращает, имеется ли разрыв перед панелью toolbar.
Смотрите также addToolBarBreak() и insertToolBarBreak().
Этот сигнал посылается, когда меняется стиль, используемый для кнопок панели инструментов. Новый стиль передается в параметре toolButtonStyle.
Вы можете соединить этот сигнал с другими компонентами, чтобы помочь вашему приложению сохранять надлежащий вид.
Смотрите также setToolButtonStyle().
Copyright © 2008 Nokia | Торговые марки | Qt 4.4.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |