Centralwidget qt что это
Класс QMainWindow предоставляет главное окно приложения. Далее.
Открытые типы
Свойства
Открытые функции
Открытые слоты
Сигналы
Дополнительные унаследованные члены
Подробное описание
Класс QMainWindow предоставляет главное окно приложения.
Структура главного окна в Qt
Главное окно предоставляет структуру для создания пользовательского интерфейса приложения. Qt имеет класс QMainWindow и связанные с ним классы для управления главным окном. QMainWindow имеет собственный компоновщик, в который вы можете добавлять QToolBar’ы, QDockWidget’ы, QMenuBar, и QStatusBar. Компоновщик имеет центральную область, которая может быть занята любым виджетом. Вы можете увидеть изображение компоновщика ниже.
Замечание: Создание главного окна без центрального виджета не поддерживается. Вы должны иметь центральный виджет даже если это просто «заполнитель».
Создание компонентов главного окна
Центральный виджет, обычно, представляет собой стандартный виджет Qt, такой как QTextEdit или QGraphicsView. Пользовательские виджеты могут быть использованы для расширенных приложений. Вы устанавливаете центральный виджет с помощью функции setCentralWidget().
Теперь мы рассмотрим каждый из виджетов, которые могут быть добавлены в главное окно. Мы приводим примеры того, как создавать и добавлять их.
Создание меню
Qt реализует меню в классе QMenu и QMainWindow хранит их в QMenuBar. QAction’ы (действия) добавляются в меню, которое отображает их как элементы меню.
Вы можете добавить новое меню на панель меню главного окна, взывая функцию menuBar(), которая вернет QMenuBar для окна, и, затем, добавить меню с помощью функции QMenuBar::addMenu().
QMainWindow уже содержит панель меню по умолчанию, но вы можете добавить свою панель с помощью функции setMenuBar(). Если вы хотите реализовать собственную панель меню (т.е. не используя виджет QMenuBar), вы можете установить её с помощью функции setMenuWidget().
Следующий пример о том, как создать меню:
Функция createPopupMenu() создает всплывающие меню, когда главное окно принимает события контекстного меню. Реализация по умолчанию, генерирует меню с отмечаемыми действиями на основе прикрепляемых виджетов и панелей инструментов. Вы можете переопределить createPopupMenu() для своего меню.
Создание панелей инструментов
Панель инструментов реализована в классе QToolBar. Вы можете добавить панель инструментов в главное окно с помощью функции addToolBar().
Ниже приведен пример создания панели инструментов:
Создание прикрепляемых виджетов
Имеется четыре зоны для размещения прикрепляемых виджетов, которые определяются перечислением Qt::DockWidgetArea: слева, справа, сверху и снизу. [FIXME]You can specify which dock widget area that should occupy the corners where the areas overlap with setCorner(). По умолчанию каждая область может иметь только один ряд (вертикальный или горизонтальный) прикрепляемых виджетов, но если вы разрешите наложение (nesting) с помощью setDockNestingEnabled(), прикрепляемые виджеты будут добавляться в любом направлении.
Два прикрепляемых виджета могут быть также наложены друг на друга. Затем используется QTabBar, чтобы выбрать виджет, который должен быть отображен.
Мы приводим пример, как создавать и добавлять прикрепляемые виджеты в главном окне:
Строка состояния
Вы можете установить строку состояния с помощью setStatusBar(), но одна создаётся при первом вызове функции statusBar() (которая возвращает строку состояния главного окна). Как её использовать, смотрите QStatusBar.
Сохранение состояния
QMainWindow может сохранить состояние своей компоновки с помощью saveState(); позже, можно восстановить состояние с помощью restoreState(). Будут сохранены позиции и размеры (относительно размера главного окна) панелей инструментов и прикрепляемых виджетов.
Описание типов-членов
enum QMainWindow::DockOption
flags QMainWindow::DockOptions
Данное перечисление содержит флаги, которые определяют поведение прикрепляемых виджетов 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.
Описание свойств
animated : bool
Это свойство указывает, являются ли действия с прикрепляемыми виджетами или панелями инструментов анимироваными.
Когда прикрепляемый виджет или панель инструментов перетаскиваются по главному окну, главное окно регулирует их содержимое, чтобы показать, где прикрепляемый виджет или панель инструментов будут прикреплены, если их отпустить. Установка этого свойства заставит QMainWindow перемещать его содержимое с плавной анимацией. Сброс этого свойства заставит содержимое прилипать к своему новому положению.
По умолчанию, это свойство установлено. Оно может быть сброшено, если главное окно содержит виджеты, которые медленно изменяют свои размеры или перерисовываются.
Установка этого свойства идентична установке флага AnimatedDocks помощью функции setDockOptions().
Это свойство было введено в Qt 4.2.
dockNestingEnabled : bool
Это свойство указывает, могут ли прикрепляемые виджеты быть вложены (nested).
Если это свойство равно false, то области прикрепления могут содержать только один ряд (горизонтальный или вертикальный) прикрепляемых виджетов. Если свойство равно true, то область, занимаемая прикрепляемым виджетом, может быть разделена в одном из направлений, чтобы вместить в себя больше виджетов.
Вложенность прикрепляемых виджетов необходима в приложениях, которые содержат много прикрепляемых виджетов. Это дает пользователю больше свободы в организации главного окна. Тем не менее, вложенность ведёт к более сложному (и менее интуитивному) поведению, когда прикрепляемый виджет перетаскивается по главному окну, так как существует множество путей, в которых отпускаемый виджет может быть помещён в области прикрепления.
Установка этого свойства идентична установке флага AllowNestedDocks с помощью функции setDockOptions().
Это свойство было введено в Qt 4.2.
dockOptions : DockOptions
Это свойство указывает поведение прикрепления QMainWindow.
Это свойство было введено в Qt 4.3.
iconSize : QSize
Это свойство определяет размер значков на панели инструментов в этом главном окне.
По умолчанию устанавливается умалчиваемый размер стиля ГПИ (GUI). Заметьте, что используемые значки должны быть, по меньшей мере, этого же размера, так как значки масштабируются только в сторону уменьшения.
toolButtonStyle : Qt::ToolButtonStyle
Это свойство определяет стиль кнопок на панели инструментов в этом главном окне.
unifiedTitleAndToolBarOnMac : bool
Это свойство описывает, использует ли главное окно унифицированный вид (unified look) заголовка и панели инструментов на Mac OS X.
По умолчанию это свойство равно false и имеет смысл только для Mac OS X 10.4 и выше.
Если равно true, тогда верхняя область панели инструментов заменяется на Carbon HIToolbar и все панели инструментов верхней области перемещаются в эту. Любые панели инструментов, добавленные впоследствии, будут также добавлены в Carbon HIToolbar. Это означает несколько вещей.
Возврат к значению false удалит все эти ограничения.
Флаг Qt::WA_MacBrushedMetal имеет приоритет над этим свойством.
Это свойство было введено в Qt 4.3.
Описание функций-членов
QMainWindow::QMainWindow ( QWidget * parent = 0, Qt::WindowFlags flags = 0 )
Конструирует QMainWindow с родителем parent и определенными флагами flags.
QMainWindow::
Уничтожает главное окно.
void QMainWindow::addDockWidget ( Qt::DockWidgetArea area, QDockWidget * dockwidget )
Добавляет заданный прикрепляемый виджет (dockwidget) в определённую область area.
void QMainWindow::addDockWidget ( Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation )
Это перегруженная функция, предоставленная для удобства.
Добавляет прикрепляемый виджет dockwidget в заданную область area в направлении, задаваемом orientation.
void QMainWindow::addToolBar ( Qt::ToolBarArea area, QToolBar * toolbar )
Добавляет панель инструментов toolbar в определённую область area, главного окна. Панель toolbar размещается в конце текущего блока панелей (т.е. строки) Если панель toolbar уже находится под управлением главного окна, то она только переместится в область area.
void QMainWindow::addToolBar ( QToolBar * toolbar )
Это перегруженная функция, предоставленная для удобства.
Эквивалентно вызову addToolBar(Qt::TopToolBarArea, toolbar)
QToolBar * QMainWindow::addToolBar ( const QString & title )
Это перегруженная функция, предоставленная для удобства.
Создаёт объект QToolBar, устанавливая его заголовок в title, и вставляет его в верхнюю область панелей инструментов.
void QMainWindow::addToolBarBreak ( Qt::ToolBarArea area = Qt::TopToolBarArea )
Добавляет разрыв панели инструментов в заданную область area после всех других объектов, присутствующих в данный момент.
QWidget * QMainWindow::centralWidget () const
Возвращает центральный виджет главного окна. Эта функция вернёт ноль, если центральный виджет не был установлен.
Qt::DockWidgetArea QMainWindow::corner ( Qt::Corner corner ) const
Возвращает область прикрепления, которая занимает указанный угол corner.
QMenu * QMainWindow::createPopupMenu () [virtual]
Возвращает всплывающее меню, содержащее отмечаемые записи для панелей инструментов и прикрепляемых виджетов имеющиеся в главном окне. Если панели инструментов и прикрепляемые виджеты отсутствуют, эта функция возвращает нулевой указатель.
По умолчанию, эта функция вызывается главным окном, когда пользователь активирует контекстное меню, обычно щелчком правой кнопкой мыши на панели инструментов или прикрепляемом виджете.
Если вы хотите создать собственное всплывающее меню, переопределите эту функцию и верните вновь созданное всплывающее меню. Владение выпадающим меню передается вызвавшему объекту.
Qt::DockWidgetArea QMainWindow::dockWidgetArea ( QDockWidget * dockwidget ) const
Возвращает область Qt::DockWidgetArea, в которой содержится dockwidget. Если dockwidget не был добавлен в главное окно, эта функция вернет Qt::NoDockWidgetArea.
void QMainWindow::iconSizeChanged ( const QSize & iconSize ) [signal]
Этот сигнал посылается, когда изменяется размер значков, использующихся в окне. Новый размер значков передается в iconSize.
Вы можете соединить этот сигнал с другими компонентами, чтобы помочь вашему приложению сохранять надлежащий вид.
void QMainWindow::insertToolBar ( QToolBar * before, QToolBar * toolbar )
Вставляет панель инструментов toolbar перед панелью before, в область, занимаемую панелью before. Например, если принято размещать элементы слева направо, то toolbar будет размещена слева от панели инструментов before, в горизонтальной области.
void QMainWindow::insertToolBarBreak ( QToolBar * before )
Вставляет разрыв перед панелью before.
QMenuBar * QMainWindow::menuBar () const
Возвращает панель меню для главного окна. Эта функция создает и возвращает пустую панель меню, если панель не существует.
Если вы хотите, чтобы все окна в Mac-приложении использовали общую панель меню, не используйте эту функцию, чтобы создавать её, потому что панель меню, созданная здесь будет иметь этот экземпляр QMainWindow в качестве родителя. Вместо этого, вы должны создать панель меню не имеющую родителя, которую вы можете, затем, сделать общей среди всех Mac-окон. Создайте панель меню без родителя таким способом:
QWidget * QMainWindow::menuWidget () const
Возвращает панель меню для главного окна. Эта функция возвращает null, если панель меню еще не создана.
Эта функция была введена в Qt 4.2.
void QMainWindow::removeDockWidget ( QDockWidget * dockwidget )
Удаляет dockwidget из компоновщика главного окна и скрывает его. Заметьте, что dockwidget не удаляется.
void QMainWindow::removeToolBar ( QToolBar * toolbar )
Удаляет панель инструментов toolbar из компоновщика главного окна и скрывает его. Заметьте, что toolbar не удаляется.
void QMainWindow::removeToolBarBreak ( QToolBar * before )
[FIXME] Удаляет разрыв панели инструментов, вставленный перед панелью before.
bool QMainWindow::restoreDockWidget ( QDockWidget * dockwidget )
Восстанавливает состояние dockwidget, если он создан после вызова функции restoreState(). Возвращает true, если состояние было восстановлено; в противном случае возвращает false.
bool QMainWindow::restoreState ( const QByteArray & state, int version = 0 )
Восстанавливает состояние state панелей инструментов и прикрепляемых виджетов этого главного окна. Номер версии (version) сравнивается с тем, что сохранен в state. Если они не соответствуют, состояние главного окна остаётся неизменным, и эта функция вернёт false; в противном случае, состояние восстанавливается, и эта функция вернёт true.
QByteArray QMainWindow::saveState ( int version = 0 ) const
Сохраняет текущее состояние панелей инструментов и прикрепляемых виджетов главного окна. Номер версии (version) сохраняется как часть данных.
Свойство objectName используется для идентификации каждого QToolBar и QDockWidget. Вы должны быть уверены, что это свойство уникально для каждого QToolBar’а и QDockWidget’а, которые вы добавляете в QMainWindow
Для восстановления сохраненного состояния, передайте возвращённое значение и номер версии (version) в функцию restoreState().
void QMainWindow::setCentralWidget ( QWidget * widget )
Устанавливает заданный виджет (widget), в качестве центрального виджета главного окна.
Замечание: QMainWindow становится владельцем объекта, на который указывает widget, и удаляет его в соответствующий момент.
void QMainWindow::setCorner ( Qt::Corner corner, Qt::DockWidgetArea area )
Устанавливает заданную область (area) прикрепления виджета, чтобы занять указанный угол corner.
void QMainWindow::setMenuBar ( QMenuBar * menuBar )
Устанавливает в главном окне панель меню menuBar.
Замечание: QMainWindow становится владельцем объекта, на который указывает menuBar, и удаляет его в соответствующий момент.
void QMainWindow::setMenuWidget ( QWidget * menuBar )
Устанавливает в главном окне панель меню menuBar.
QMainWindow становится владельцем объекта, на который указывает menuBar, и удаляет его в соответствующий момент.
Эта функция была введена в Qt 4.2.
void QMainWindow::setStatusBar ( QStatusBar * statusbar )
Устанавливает в главном окне строку состояния statusbar.
Установка строки состояния в 0 удалит её из главного окна. Замечание: QMainWindow становится владельцем объекта, на который указывает statusbar, и удаляет его в соответствующий момент.
void QMainWindow::splitDockWidget ( QDockWidget * first, QDockWidget * second, Qt::Orientation orientation )
Разделяет пространство, охватываемое прикрепляемым виджетом first на две части, перемещает прикрепляемый виджет first в первую часть, а прикрепляемый виджет second во вторую часть.
Аргумент orientation определяет, как разделяется пространство: Qt::Horizontal разделяет пространство второго виджета справа от первого; Qt::Vertical разделяет пространство второго виджета ниже первого.
Замечание: если first в данный момент прикреплен в виде вкладки, то second будет добавлен как новая вкладка, а не как сосед виджета first. Это происходит из-за того, что одна вкладка может содержать только один прикрепляемый виджет.
Замечание: Qt::LayoutDirection влияет на порядок расположения прикрепляемых виджетов в двух частях разделённой области. Когда разрешена компоновка с расположением справа налево, размещение прикрепляемых виджетов осуществляется в обратную сторону.
QStatusBar * QMainWindow::statusBar () const
Возвращает строку состояния главного окна. Эта функция создает и возвращает пустую строку состояния, если она не существует.
void QMainWindow::tabifyDockWidget ( QDockWidget * first, QDockWidget * second )
Помещает прикрепляемый виджет second над виджетом first, создавая в главном окне область прикрепления со вкладками.
Qt::ToolBarArea QMainWindow::toolBarArea ( QToolBar * toolbar ) const
Возвращает Qt::ToolBarArea для toolbar. Если панель toolbar не была добавлена в главное окно, эта функция вернет Qt::NoToolBarArea.
bool QMainWindow::toolBarBreak ( QToolBar * toolbar ) const
Возвращает, имеется ли разрыв перед панелью toolbar.
void QMainWindow::toolButtonStyleChanged ( Qt::ToolButtonStyle toolButtonStyle ) [signal]
Этот сигнал посылается, когда меняется стиль, используемый для кнопок панели инструментов. Новый стиль передается в параметре toolButtonStyle.
Вы можете соединить этот сигнал с другими компонентами, чтобы помочь вашему приложению сохранять надлежащий вид.
Русские Блоги
Объяснение Qt простым языком (7) QMainWindow
Класс окна QMainWindow
Обычные настольные приложения имеют общие функции, такие как строка меню, панель инструментов, строка состояния, центральное окно и другие компоненты. Строку меню можно фактически рассматривать как окно, каждое меню в строке меню также можно рассматривать как окно, и каждый компонент можно рассматривать как окно. Тогда эти типичные настольные приложения можно рассматривать как комбинацию некоторых QWidget, и такие окна действительно могут быть завершены путем создания QWidget.
Но если вы проектируете сами и повторяете эти задачи каждый раз, думать об этом немного хлопотно, поэтому Qt помогает нам реализовать такое окно, называемое QMainWindow, QMainWindow уже организовала строку меню, панель инструментов, строку состояния и другие окна, нам только нужно Просто знай, как это применять.
1 Создайте проект QMainWindow
В Qt Creator щелкните меню «Файл»
Затем введите имя проекта и нажмите «Далее», чтобы перейти в окно «Настройка цепочки инструментов», а затем нажмите «Далее».
Перейдите в окно, показанное на рисунке, выберите базовый класс как QMainWindow и снимите флажок «Создать интерфейс» (на самом деле, вы также можете это проверить),
Щелкните Next еще раз, чтобы перейти к окну контроля версий, затем щелкните Finish, после чего будет создан проект нашего QMainWindow.
2 Приложение строки меню
2.1 Добавить строку меню
В Qt классом строки меню является QMenuBar, который также унаследован от QWidget. Строка меню представляет собой окно с длинной полосой, которое может быть горизонтальным или вертикальным. Строку меню можно расположить.
Получите указатель на объект QMenuBar через QMainWindow :: MenuBar (), если объект не существует, создайте новый. Эта функция может только создавать строку меню, прототип функции выглядит следующим образом:
Вы также можете установить объект QMenuBar с помощью new, а затем установить строку меню главного окна с помощью QMainWindow :: setMenuBar.
2.2 Добавить меню
После создания строки меню вы можете расположить меню в строке меню.Класс меню называется QMenu, и QMenu также унаследован от QWidget.
Для добавления объекта QMenu в объект QMenuBar можно использовать функции:
2.3 Добавить действие
Добавьте одно из самых простых действий
Добавить действие со значком
Добавить QAction, связанный с функцией слота close () текущего окна
Добавьте QAction, связанный с функцией слота close () текущего окна, и установите горячую клавишу
Добавьте QAction со значком, связанным с функцией слота close () текущего окна, и установите горячую клавишу
Сделайте QAction интерактивным
2.4 Добавить разделитель
Разделитель может играть декоративную роль. Используйте QMenu :: addSeparator (), чтобы добавить разделитель.
2.5 Добавить подменю
Чтобы добавить подменю в меню, вызовите QMenu :: addMenu ().
3 Приложение панели инструментов
3.1 Добавить панель инструментов
3.2 Добавить действие
Объект действия QAction также можно добавить на панель инструментов с помощью QToolBar :: addAction.
Объект QAction можно использовать повторно, затем объект действия в меню можно удалить и использовать. Общие меню настольных приложений и действия на панели инструментов часто используются совместно.
4 Приложение строки состояния
4.1 Создание строки состояния
Чтобы создать строку состояния в QMainWindow, вы можете использовать QMainWindow :: statusBar
Если объект QStatusBar не существует, создайте новый. Если он существует, он возвращает объект QStatusBar. Только один может быть создан с помощью этой функции
Вы также можете создать его самостоятельно, а затем использовать QMainWindow :: setStatusBar для установки строки состояния главного окна.
4.2 Установка информации в строке состояния
Функцию QStatusBar :: showMessage можно использовать для установки отображаемой информации в строке состояния.
5 Установите центральное окно
Центральное окно QMainWindow может использовать QMainWindow :: CentralWidget для установки объекта QWidget или объекта производного класса в качестве центрального окна главного окна.
6 Установите окно док-станции
Есть два конструктора QDockWidget
Объект QDockWidget нельзя использовать как обычное окно, но нормальное окно может быть вложено в окно.
Окно закрепления QMainWindow может использовать QMainWindow :: addDockWidget, чтобы установить объект QDockWidget или объект производного класса в качестве центрального окна главного окна.