QMainWindow Class Reference

[QtGui module]

QMainWindow类提供了一个主应用程序窗口。More…

继承QWidget

Types

  • enum DockOption { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs }
  • class **[DockOptions]($docs-index.htm)**

Methods

  • __init__ (self, QWidget parent = None, Qt.WindowFlags flags = 0)
  • addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget)
  • addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget, Qt.Orientation orientation)
  • addToolBar (self, Qt.ToolBarArea area, QToolBar toolbar)
  • addToolBar (self, QToolBar toolbar)
  • QToolBar addToolBar (self, QString title)
  • addToolBarBreak (self, Qt.ToolBarArea area = Qt.TopToolBarArea)
  • QWidget centralWidget (self)
  • contextMenuEvent (self, QContextMenuEvent event)
  • Qt.DockWidgetArea corner (self, Qt.Corner corner)
  • QMenu createPopupMenu (self)
  • DockOptions dockOptions (self)
  • Qt.DockWidgetArea dockWidgetArea (self, QDockWidget dockwidget)
  • bool documentMode (self)
  • bool event (self, QEvent event)
  • QSize iconSize (self)
  • insertToolBar (self, QToolBar before, QToolBar toolbar)
  • insertToolBarBreak (self, QToolBar before)
  • bool isAnimated (self)
  • bool isDockNestingEnabled (self)
  • bool isSeparator (self, QPoint pos)
  • QMenuBar menuBar (self)
  • QWidget menuWidget (self)
  • removeDockWidget (self, QDockWidget dockwidget)
  • removeToolBar (self, QToolBar toolbar)
  • removeToolBarBreak (self, QToolBar before)
  • bool restoreDockWidget (self, QDockWidget dockwidget)
  • bool restoreState (self, QByteArray state, int version = 0)
  • QByteArray saveState (self, int version = 0)
  • setAnimated (self, bool enabled)
  • setCentralWidget (self, QWidget widget)
  • setCorner (self, Qt.Corner corner, Qt.DockWidgetArea area)
  • setDockNestingEnabled (self, bool enabled)
  • setDockOptions (self, DockOptions options)
  • setDocumentMode (self, bool enabled)
  • setIconSize (self, QSize iconSize)
  • setMenuBar (self, QMenuBar menubar)
  • setMenuWidget (self, QWidget menubar)
  • setStatusBar (self, QStatusBar statusbar)
  • setTabPosition (self, Qt.DockWidgetAreas areas, QTabWidget.TabPosition tabPosition)
  • setTabShape (self, QTabWidget.TabShape tabShape)
  • setToolButtonStyle (self, Qt.ToolButtonStyle toolButtonStyle)
  • setUnifiedTitleAndToolBarOnMac (self, bool set)
  • splitDockWidget (self, QDockWidget after, QDockWidget dockwidget, Qt.Orientation orientation)
  • QStatusBar statusBar (self)
  • list-of-QDockWidget tabifiedDockWidgets (self, QDockWidget dockwidget)
  • tabifyDockWidget (self, QDockWidget first, QDockWidget second)
  • QTabWidget.TabPosition tabPosition (self, Qt.DockWidgetArea area)
  • QTabWidget.TabShape tabShape (self)
  • Qt.ToolBarArea toolBarArea (self, QToolBar toolbar)
  • bool toolBarBreak (self, QToolBar toolbar)
  • Qt.ToolButtonStyle toolButtonStyle (self)
  • bool unifiedTitleAndToolBarOnMac (self)

Qt Signals

  • void iconSizeChanged (const QSize&)
  • void toolButtonStyleChanged (Qt::ToolButtonStyle)

Detailed Description

QMainWindow类提供了一个主应用程序窗口。

Qt Main Window Framework

一个主窗口提供了构建应用程序的用户界面的框架。 Qt拥有的QMainWindow和其related classes主窗口管理。 QMainWindow中有自己的布局中,您可以添加QToolBar秒,QDockWidget秒,一个QMenuBarQStatusBar。布局具有能够由任何类型的窗口小部件所佔据的中心区域。你可以看到下面的布局的图像。

QMainWindow Class Reference - 图1

Note:创建没有中央部件的主窗口,不支持。你必须有一个中心窗体,即使它只是一个佔位符。

Creating Main Window Components

一个核心部件,通常是一个标准的Qt窗口部件,如QTextEditQGraphicsView。自定义部件也可用于高级应用。您设置的中央小部件setCentralWidget()

主窗口有一个单一( SDI )或多个( MDI)的文档界面。您可以通过使用创建Qt中MDI应用程序QMdiArea作为中央部件。

现在,我们将检查每一个可以添加到主窗口中的其他部件。我们就如何创建和添加他们的例子。

Creating Menus

Qt的实现在菜单QMenu和QMainWindow的让他们在一个QMenuBarQActions的加入到菜单,它们显示为菜单项。

你可以通过调用添加新的菜单到主窗口的菜单栏menuBar(),它返回QMenuBar为窗口,然后添加一个菜单QMenuBar.addMenu( ) 。

QMainWindow中带有一个默认的菜单栏,但你也可以设置一个与自己setMenuBar()。如果你想实现一个自定义菜单栏(即不使用QMenuBar小工具) ,你可以用它设置setMenuWidget()

如何创建菜单的示例如下:

  1. void MainWindow.createMenus()
  2. {
  3. fileMenu = menuBar()->addMenu(tr("&File"));
  4. fileMenu->addAction(newAct);
  5. fileMenu->addAction(openAct);
  6. fileMenu->addAction(saveAct);

createPopupMenu()函数创建一个弹出式菜单,当主窗口接收上下文菜单事件。默认的实现产生与从码头小部件和工具栏的可复操作的菜单。您可以重新实现createPopupMenu()自定义菜单。

Creating Toolbars

工具栏的实现QToolBar类。你将工具栏添加到主窗口addToolBar()

您可以通过将其分配到特定的控制工具栏的初始位置Qt.ToolBarArea。您可以通过插入一个工具栏断裂分割的区域 - 认为这是在文本编辑换行符 - 与addToolBarBreak() or insertToolBarBreak()。您还可以通过与用户的位置限制QToolBar.setAllowedAreas()和QToolBar.setMovable( ) 。

工具栏图标的大小可以检索与iconSize()。的大小是依赖于平台的,你可以设置一个固定大小setIconSize()。你可以改变所有工具按钮在工具栏的外观setToolButtonStyle()

工具栏上创建的示例如下:

  1. void MainWindow.createToolBars()
  2. {
  3. fileToolBar = addToolBar(tr("File"));
  4. fileToolBar->addAction(newAct);

Creating Dock Widgets

底座部件都在实施QDockWidget类。一个可停靠小部件是一个可以停靠到主窗口的窗口。您添加小部件码头到主窗口addDockWidget()

有四个底座部件领域给予的Qt.DockWidgetArea枚举:左,右,顶部和底部。您可以指定哪些码头小工具区域,应该佔据的区域中重叠的角落setCorner()。默认情况下每个区域只能包含一行坞窗口小部件(垂直或水平) ,但如果你启用拼图与setDockNestingEnabled(),停靠小部件可以在任一方向被添加。

两底座部件也可以堆叠在彼此的顶部上。一QTabBar然后,用于选择哪一个应该被显示的窗口小部件。

我们给出了如何创建和添加停靠小部件到主窗口的例子:

  1. [QDockWidget]($docs-qdockwidget.html) *dockWidget = new [QDockWidget]($docs-qdockwidget.html)(tr("Dock Widget"), this);
  2. dockWidget->setAllowedAreas([Qt](qt.html).LeftDockWidgetArea |
  3. [Qt](qt.html).RightDockWidgetArea);
  4. dockWidget->setWidget(dockWidgetContents);
  5. addDockWidget([Qt](qt.html).LeftDockWidgetArea, dockWidget);

The Status Bar

你可以设置一个状态栏与setStatusBar(),但一个是创建的第一次statusBar()(返回主窗口的状态栏)被调用。看QStatusBar关于如何使用它的信息。

Storing State

QMainWindow中可以存储与布局的状态saveState()它可在以后被检索以restoreState()。它的位置和大小存储工具栏和停靠窗口小部件(相对于主窗口的大小) 。


Type Documentation

  1. QMainWindow.DockOption

此枚举包含指定的停靠行为的标志QMainWindow

Constant Value Description
QMainWindow.AnimatedDocks 0x01 相同的animated属性。
QMainWindow.AllowNestedDocks 0x02 相同的dockNestingEnabled属性。
QMainWindow.AllowTabbedDocks 0x04 用户可以在“上面”的另一个摔个码头部件。这两个部件堆叠和标籤栏出现选择哪一个是可见的。
QMainWindow.ForceTabbedDocks 0x08 每个码头区域包含标籤船坞部件的单一堆栈。换句话说,基座部件不能彼此相邻放置在一个基座区域。如果这个选项被设置, AllowNestedDocks没有效果。
QMainWindow.VerticalTabs 0x10 在主窗口的两侧的两个垂直的码头区展示自己的标籤垂直。如果未设置此选项,则所有码头区展示自己的标籤在底部。意味着AllowTabbedDocks 。另请参阅setTabPosition( ) 。

这些选项仅控制如何停靠小部件可以在一个被丢弃QMainWindow。他们不重新安排了被告席小部件,以符合指定的选项。出于这个原因,他们应该之前设置任何船坞小部件添加到主窗口。例外情况是在AnimatedDocks和VerticalTabs选项,其可以在任何时候设置。

这个枚举被引入或修改的Qt 4.3 。

该DockOptions类型是一个typedef为QFlags\u003cDockOption\u003e 。它存储DockOption值的或组合。


Method Documentation

  1. QMainWindow.__init__ (self, QWidget parent = None, Qt.WindowFlags flags = 0)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个QMainWindow用给定的parent和指定的窗口小部件flags

QMainWindow设置Qt.Window标志本身,并会因此总是被创建为一个顶级窗口部件。

  1. QMainWindow.addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget)

dockwidget说法有它的所有权转移给Qt的。

将给定dockwidget到指定的area

  1. QMainWindow.addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget, Qt.Orientation orientation)

dockwidget说法有它的所有权转移给Qt的。

添加dockwidget在给定的area在由指定的方向orientation

  1. QMainWindow.addToolBar (self, Qt.ToolBarArea area, QToolBar toolbar)

toolbar说法有它的所有权转移给Qt的。

添加toolbar到指定的area在这个主窗口。该toolbar被放置在当前工具栏块(即行)的端部。如果主窗口已经管理toolbar那么它只是将工具栏移动到area

See also insertToolBar( )addToolBarBreak()和insertToolBarBreak( ) 。

  1. QMainWindow.addToolBar (self, QToolBar toolbar)

toolbar说法有它的所有权转移给Qt的。

这是一个重载函数。

相当于调用addToolBar (中Qt.TopToolBarAreatoolbar

  1. QToolBar QMainWindow.addToolBar (self, QString title)

[

这是一个重载函数。

]($docs-qtoolbar.html)

创建QToolBar对象,其窗口标题设置为title,并将其插入到顶部的工具栏区域。

See also setWindowTitle( ) 。

  1. QMainWindow.addToolBarBreak (self, Qt.ToolBarArea area = Qt.TopToolBarArea)

增加了一个工具栏突破给定的area所有存在的其它对象之后。

  1. QWidget QMainWindow.centralWidget (self)

[

返回中央部件的主窗口。该函数返回零,如果中央部件尚未确定。

]($docs-qwidget.html)

See also setCentralWidget( ) 。

  1. QMainWindow.contextMenuEvent (self, QContextMenuEvent event)

从重新实现QWidget.contextMenuEvent( ) 。

  1. Qt.DockWidgetArea QMainWindow.corner (self, Qt.Corner corner)

[

返回码头小工具区域,佔据指定corner

]($docs-qt.html#DockWidgetArea-enum)

See also setCorner( ) 。

  1. QMenu QMainWindow.createPopupMenu (self)

[

返回包含存在于主窗口中的工具栏和停靠小部件可选中条目的弹出式菜单。如果没有工具栏和停靠小部件存在,此函数返回一个空指针。

默认情况下,该功能是由所谓的主窗口当用户激活上下文菜单,通常通过一个工具栏或停靠控件上单击鼠标右键。

如果你想创建一个自定义弹出菜单,重新实现这个函数,并返回一个新创建的弹出式菜单。在弹出菜单的所有权被传递给调用者。

]($docs-qmenu.html)

See also addDockWidget( )addToolBar()和menuBar( ) 。

  1. DockOptions QMainWindow.dockOptions (self)

  1. Qt.DockWidgetArea QMainWindow.dockWidgetArea (self, QDockWidget dockwidget)

返回Qt.DockWidgetAreadockwidget。如果dockwidget还没有被添加到主窗口,该函数返回Qt.NoDockWidgetArea

See also addDockWidget( )splitDockWidget()和Qt.DockWidgetArea

  1. bool QMainWindow.documentMode (self)
  1. bool QMainWindow.event (self, QEvent event)

从重新实现QObject.event( ) 。

  1. QSize QMainWindow.iconSize (self)

[

  1. QMainWindow.insertToolBar (self, QToolBar before, QToolBar toolbar)

toolbar说法有它的所有权转移给Qt的。

插入toolbar到由所佔用的面积before工具栏,使其出现之前它。例如,在正常的左到右的布局的操作中,这意味着toolbar会出现由指定的工具栏左侧before在水平工具栏区域。

]($docs-qsize.html)

See also insertToolBarBreak( )addToolBar()和addToolBarBreak( ) 。

  1. QMainWindow.insertToolBarBreak (self, QToolBar before)

通过插入指定的工具栏前一个工具栏突破before

  1. bool QMainWindow.isAnimated (self)
  1. bool QMainWindow.isDockNestingEnabled (self)
  1. bool QMainWindow.isSeparator (self, QPoint pos)
  1. QMenuBar QMainWindow.menuBar (self)

[

返回主窗口中的菜单栏。这个函数创建并返回一个空的菜单栏,如果菜单栏不存在。

]($docs-qmenubar.html)

如果你想在一台Mac应用程序的所有窗口共享一个菜单栏,请不要使用此功能来创建它,因为在这里创建的菜单栏都会有这样的QMainWindow作为其母公司。相反,你必须创建一个没有父母,然后您可以将所有的Mac窗口之间共享一个菜单栏。创建一个父少菜单栏是这样的:

  1. [QMenuBar]($docs-qmenubar.html) *menuBar = new [QMenuBar]($docs-qmenubar.html)(0);

See also setMenuBar( ) 。

  1. QWidget QMainWindow.menuWidget (self)

[

返回主窗口中的菜单栏。如果菜单栏没有已建成但这个函数返回null。

这个函数中引入了Qt 4.2中。

]($docs-qwidget.html)

See also setMenuWidget( ) 。

  1. QMainWindow.removeDockWidget (self, QDockWidget dockwidget)

dockwidget争论

移除dockwidget从主窗口的布局和隐藏它。注意,这个dockwidget is not删除。

  1. QMainWindow.removeToolBar (self, QToolBar toolbar)

移除toolbar从主窗口的布局和隐藏它。注意,这个toolbar is not删除。

  1. QMainWindow.removeToolBarBreak (self, QToolBar before)

通过删除指定的工具栏之前,先前插入一个工具栏突破before

  1. bool QMainWindow.restoreDockWidget (self, QDockWidget dockwidget)

恢复的状态dockwidget如果它被调用之后创建restoreState( ) 。返回True如果状态得到恢复,否则返回False 。

See also restoreState()和saveState( ) 。

  1. bool QMainWindow.restoreState (self, QByteArray state, int version = 0)

恢复state这个主窗口的工具栏和dockwidgets 。该version号与存储在比较state。如果它们不匹配,则主窗口的状态保持不变,并且该函数返回false否则,该状态被恢复,并且该函数返回true

要使用恢复保存几何QSettings,你可以使用如下代码:

  1. void MainWindow.readSettings()
  2. {
  3. [QSettings]($docs-qsettings.html) settings("MyCompany", "MyApp");
  4. restoreGeometry(settings.value("myWidget/geometry").toByteArray());
  5. restoreState(settings.value("myWidget/windowState").toByteArray());
  6. }

See also saveState( )QWidget.saveGeometry( )QWidget.restoreGeometry()和restoreDockWidget( ) 。

  1. QByteArray QMainWindow.saveState (self, int version = 0)

[

保存这个主窗口的工具栏和dockwidgets的当前状态。该version号码被存储作为数据的一部分。

]($docs-qbytearray.html)

objectName属性是用于识别每个QToolBarQDockWidget。您应该确保这个属性是唯一的每个QToolBarQDockWidget您添加到QMainWindow

要恢复保存的状态,通过返回值和versionrestoreState( ) 。

要保存窗口关闭时的几何形状,可以实现这样一个close事件:

  1. void MyMainWindow.closeEvent([QCloseEvent](qcloseevent.html) *event)
  2. {
  3. [QSettings]($docs-qsettings.html) settings("MyCompany", "MyApp");
  4. settings.setValue("geometry", saveGeometry());
  5. settings.setValue("windowState", saveState());
  6. [QMainWindow]($docs-qmainwindow.html).closeEvent(event);
  7. }

See also restoreState( )QWidget.saveGeometry()和QWidget.restoreGeometry( ) 。

  1. QMainWindow.setAnimated (self, bool enabled)

这种方法也是一个Qt槽与C + +的签名void setAnimated(bool)

  1. QMainWindow.setCentralWidget (self, QWidget widget)

widget说法有它的所有权转移给Qt的。

设置给定widget要在主窗口的中央窗口部件。

注意:QMainWindow采取所有权widget指针并删除它在适当的时候。

See also centralWidget( ) 。

  1. QMainWindow.setCorner (self, Qt.Corner corner, Qt.DockWidgetArea area)

设置给定坞窗口小部件area佔据了指定corner

See also corner( ) 。

  1. QMainWindow.setDockNestingEnabled (self, bool enabled)

这种方法也是一个Qt槽与C + +的签名void setDockNestingEnabled(bool)

  1. QMainWindow.setDockOptions (self, DockOptions options)
  1. QMainWindow.setDocumentMode (self, bool enabled)
  1. QMainWindow.setIconSize (self, QSize iconSize)
  1. QMainWindow.setMenuBar (self, QMenuBar menubar)

menubar说法有它的所有权转移给Qt的。

设置主窗口菜单栏menuBar

注意:QMainWindow采取所有权menuBar指针并删除它在适当的时候。

See also menuBar( ) 。

  1. QMainWindow.setMenuWidget (self, QWidget menubar)

menubar说法有它的所有权转移给Qt的。

设置主窗口菜单栏menuBar

QMainWindow采取所有权menuBar指针并删除它在适当的时候。

这个函数中引入了Qt 4.2中。

See also menuWidget( ) 。

  1. QMainWindow.setStatusBar (self, QStatusBar statusbar)

statusbar说法有它的所有权转移给Qt的。

设置主窗口的状态栏statusbar

状态栏设置为0将在主窗口中删除它。需要注意的是QMainWindow采取所有权statusbar指针并删除它在适当的时候。

See also statusBar( ) 。

  1. QMainWindow.setTabPosition (self, Qt.DockWidgetAreas areas, QTabWidget.TabPosition tabPosition)

设置为给定的码头插件的选项卡位置areas到指定的tabPosition。默认情况下,所有的停靠区域显示在底部的标籤。

Note:VerticalTabs码头选项将复盖此方法设置的制表位位置。

此功能被引入Qt的4.5 。

See also tabPosition()和setTabShape( ) 。

  1. QMainWindow.setTabShape (self, QTabWidget.TabShape tabShape)
  1. QMainWindow.setToolButtonStyle (self, Qt.ToolButtonStyle toolButtonStyle)
  1. QMainWindow.setUnifiedTitleAndToolBarOnMac (self, bool set)
  1. QMainWindow.splitDockWidget (self, QDockWidget after, QDockWidget dockwidget, Qt.Orientation orientation)

dockwidget说法有它的所有权转移给Qt的。

分割复盖的空间first停靠小部件分为两个部分,移动first对接构件到第一部分中,并且使second停靠小部件进入第二部分。

orientation指定如何将空间划分:一个Qt.Horizontal拆分将第二码头Widget在第一个的右边,一个Qt.Vertical分割放置下面的第一个,第二码头部件。

Note:如果first目前在一个标籤式的停靠区域,second将作为一个新的标籤,而不是作为一个邻居first。这是因为一个标籤只能包含一个基座部件。

Note:该Qt.LayoutDirection影响中的划分区域的两个部分的基座部件的顺序。当从右到左的布局方向被启用,码头部件的摆放将得到扭转。

See also tabifyDockWidget( )addDockWidget()和removeDockWidget( ) 。

  1. QStatusBar QMainWindow.statusBar (self)

[

返回主窗口的状态栏中。这个函数创建并返回一个空的状态栏,如果状态栏不存在。

]($docs-qstatusbar.html)

See also setStatusBar( ) 。

  1. list-of-QDockWidget QMainWindow.tabifiedDockWidgets (self, QDockWidget dockwidget)

返回与tabified在一起了被告席小部件dockwidget

此功能被引入Qt的4.5 。

See also tabifyDockWidget( ) 。

  1. QMainWindow.tabifyDockWidget (self, QDockWidget first, QDockWidget second)

Moves second之上码头部件first停靠窗口小部件,创建主窗口的选项卡式停靠区域。

See also tabifiedDockWidgets( ) 。

  1. QTabWidget.TabPosition QMainWindow.tabPosition (self, Qt.DockWidgetArea area)

[

把标籤位置area

]($docs-qtabwidget.html#TabPosition-enum)

Note:VerticalTabs码头选项复盖由该函数返回的标籤位置。

此功能被引入Qt的4.5 。

See also setTabPosition()和tabShape( ) 。

  1. QTabWidget.TabShape QMainWindow.tabShape (self)

  1. Qt.ToolBarArea QMainWindow.toolBarArea (self, QToolBar toolbar)

返回Qt.ToolBarAreatoolbar。如果toolbar还没有被添加到主窗口,该函数返回Qt.NoToolBarArea

See also addToolBar( )addToolBarBreak()和Qt.ToolBarArea

  1. bool QMainWindow.toolBarBreak (self, QToolBar toolbar)

返回是否有前一个工具栏突破toolbar

See also addToolBarBreak()和insertToolBarBreak( ) 。

  1. Qt.ToolButtonStyle QMainWindow.toolButtonStyle (self)

[

  1. bool QMainWindow.unifiedTitleAndToolBarOnMac (self)

Qt Signal Documentation

  1. void iconSizeChanged (const QSize&)

这是该信号的默认超载。

当在窗口中使用的图标的大小改变时,这个信号被发射。新的图标大小是通过在iconSize

您可以将此信号连接到其他组件,以帮助保持一致的外观为您的应用程序。

]($docs-qt.html#ToolButtonStyle-enum)

See also setIconSize( ) 。

  1. void toolButtonStyleChanged (Qt::ToolButtonStyle)

这是该信号的默认超载。

当用于在窗口中的工具按钮的样式改变时,这个信号被发射。新样式传入toolButtonStyle

您可以将此信号连接到其他组件,以帮助保持一致的外观为您的应用程序。

See also setToolButtonStyle( ) 。