⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qmainwindow.html

📁 QT参考文档
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<hr><a name="details"></a><h2>详细描述</h2>
 
<p> QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。
<p> 

<p> 主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用<i>Qt设计器</i>来创建主窗口。我们将简要地回顾一下有关添加菜单项和工具条按钮,然后描述QMainWindow自己的便捷。
<p> <pre>
    QMainWindow *mw = new QMainWindow;
    <a href="qtextedit.html">QTextEdit</a> *edit = new <a href="qtextedit.html">QTextEdit</a>( mw, "editor" );
    edit-&gt;<a href="qwidget.html#setFocus">setFocus</a>();
    mw-&gt;<a href="qwidget.html#setCaption">setCaption</a>( "Main Window" );
    mw-&gt;<a href="#setCentralWidget">setCentralWidget</a>( edit );
    mw-&gt;<a href="qwidget.html#show">show</a>();
    </pre>
 
<p> QMainWindow可以像上面那样显示地来被创建。中央窗口部件是通过<a href="#setCentralWidget">setCentralWidget</a>()设置地。弹出菜单可以被添加到默认工具条,窗口部件可以被添加到状态条,工具条和锚接窗口可以被添加到任何一个锚接区域。
<p> 

<pre>        ApplicationWindow * mw = new ApplicationWindow();
        mw-&gt;<a href="qwidget.html#setCaption">setCaption</a>( "Qt Example - Application" );
    <a name="x2086"></a>    mw-&gt;<a href="qwidget.html#show">show</a>();
</pre>
<p> 上面代码中的ApplicationWindow是我们自己写的QMainWindow的子类,这是一个使用QMainWindow的常用方法。(源代码取自<a href="simple-application-example.html">application/main.cpp</a>、<a href="simple-application-example.html">application/application.cpp</a>、<a href="qaction-application-example.html">action/main.cpp</a>和<a href="qaction-application-example.html">action/application.cpp</a>。)
<p> 在继承的时候,我们在子类的构造函数中添加菜单项和工具条。如果我们已经直接创建了一个QMainWindow实例,我们可以很容易地通过传递QMainWindow实例代替作为父对象的<em>this</em>指针来添加菜单项和工具条。
<p> 

<pre>        <a href="qpopupmenu.html">QPopupMenu</a> * help = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
        <a href="#menuBar">menuBar</a>()-&gt;insertItem( "&amp;Help", help );

        help-&gt;<a href="qmenudata.html#insertItem">insertItem</a>( "&amp;About", this, SLOT(about()), Key_F1 );
</pre>
<p> 这里我们添加了有一个菜单项的新菜单。这个菜单已经被插入QMainWindow默认提供的并且可以通过<a href="#menuBar">menuBar</a>()函数访问的菜单条。当这个菜单项被点击时,这个槽被调用。
<p> 

<pre>        <a href="qtoolbar.html">QToolBar</a> * fileTools = new <a href="qtoolbar.html">QToolBar</a>( this, "file operations" );
        fileTools-&gt;<a href="qtoolbar.html#setLabel">setLabel</a>( "File Operations" );
</pre><pre>        QToolButton * fileOpen
            = new <a href="qtoolbutton.html">QToolButton</a>( openIcon, "Open File", <a href="qstring.html#QString-null">QString::null</a>,
                               this, SLOT(choose()), fileTools, "open file" );
</pre>
<p> 这部分提取显示的是有一个工具条按钮的工具条的创建。QMainWindow为工具条提供了四个锚接区域。当一个工具条被作为QMainWindow(或者继承类)实例 的子对象被创建时,它将会被放置到一个锚接区域中(默认是<a href="qt.html#Dock-enum">Top</a>锚接区域)。当这个工具条按钮被点击时,这个槽被调用。任何锚接窗口可以使用<a href="#addDockWindow">addDockWindow</a>(),或者通过把QMainWindow作为父对象来创建的方法来被添加到一个锚接区域中。
<p> 

<pre>        e = new <a href="qtextedit.html">QTextEdit</a>( this, "editor" );
        e-&gt;<a href="qwidget.html#setFocus">setFocus</a>();
        <a href="#setCentralWidget">setCentralWidget</a>( e );
        <a href="#statusBar">statusBar</a>()-&gt;message( "Ready", 2000 );
</pre>
<p> 创建完菜单和工具条,我们创建一个大的中央窗口部件的实例,给它焦点并且把它设置为主窗口的中央窗口部件。在这个实例中,我们也已经通过<a href="#statusBar">statusBar</a>()函数设置好了状态条,显示初始信息两秒。注意你可以添加其它的窗口部件到状态条重,例如标签,来显示更多的状态信息。详细情况请参考<a href="qstatusbar.html">QStatusBar</a>文档,特别是addWidget()函数。
<p> 通常我们想让一个工具条按钮和一个菜单项同步。例如,如果用户点击“加粗”工具条按钮,我们希望“加粗”菜单项被选中。这种同步可以通过创建操作并且把它们添加到工具条和菜单上来自动实现。
<p> 

<pre>        <a href="qaction.html">QAction</a> * fileOpenAction;
</pre><pre>        fileOpenAction = new <a href="qaction.html">QAction</a>( "Open File", QPixmap( fileopen ), "&amp;Open",
                                      CTRL+Key_O, this, "open" );
        <a href="qobject.html#connect">connect</a>( fileOpenAction, SIGNAL( <a href="qaction.html#activated">activated</a>() ) , this, SLOT( choose() ) );
</pre>
<p> 这里我们创建了一个有图标的操作,这个图标要用在这个操作所被添加到的菜单和工具条中。我们也给定这个操作一个菜单名称“&Open”和一个键盘快捷键。我们已经建立的这个连接在用户点击这个菜单项<em>或者</em>这个工具条按钮时将会被使用。
<p> 

<pre>        <a href="qpopupmenu.html">QPopupMenu</a> * file = new <a href="qpopupmenu.html">QPopupMenu</a>( this );
        <a href="#menuBar">menuBar</a>()-&gt;insertItem( "&amp;File", file );
</pre><pre>        fileOpenAction-&gt;<a href="qaction.html#addTo">addTo</a>( file );
</pre>
<p> 上面这部分提取显示一个弹出菜单的创建。我们把这个菜单添加到QMainWindow的菜单条中并且添加我们的操作。
<p> 

<pre>        <a href="qtoolbar.html">QToolBar</a> * fileTools = new <a href="qtoolbar.html">QToolBar</a>( this, "file operations" );
        fileTools-&gt;<a href="qtoolbar.html#setLabel">setLabel</a>( "File Operations" );
        fileOpenAction-&gt;<a href="qaction.html#addTo">addTo</a>( fileTools );
</pre>
<p> 这里我们创建一个作为QMainWindow的子对象的工具条并且把我们的操作添加到这个工具条中。
<p> 现在我们来探险QMainWindow提供的功能。
<p> 主窗口将会注意锚接区域和中央窗口部件的几何形状,但是中央窗口部件的其它所有方面都留给你了。如果你指定QMainWindow作为父对象来创建菜单条或者状态条,QMainWindow会自动检测它们,或者你可以使用提供的<a href="#menuBar">menuBar</a>()和<a href="#statusBar">statusBar</a>()函数。如果一个窗口部件也没有,menuBar()和statusBar()函数创建一个合适的窗口部件,并且更新窗口的布局来得到空间。
<p> QMainWindow提供了一个连接到状态条的<a href="qtooltipgroup.html">QToolTipGroup</a>。<a href="#toolTipGroup">toolTipGroup</a>()函数提供了对默认QToolTipGroup的访问。它不能设置一个不同的工具提示组。
<p> 新的锚接窗口和工具条可以通过使用<a href="#addDockWindow">addDockWindow</a>()来被添加到QMainWindow中。锚接窗口可以使用<a href="#moveDockWindow">moveDockWindow</a>()来移动并且使用<a href="#removeDockWindow">removeDockWindow</a>()来移除。QMainWindow允许默认锚接窗口(工具条)锚接在所有它的锚接区域中(上、下、左、右)。你可以使用<a href="#setDockEnabled">setDockEnabled</a>()为锚接窗口而使锚接区域生效/失效。当添加或者移动锚接窗口时,你可以指定它们的“边缘”(锚接区域)。当前可用的边缘有:<a href="qt.html#Dock-enum">Top</a>、<a href="qt.html#Dock-enum">Left</a>、<a href="qt.html#Dock-enum">Right</a>、<a href="qt.html#Dock-enum">Bottom</a>、<a href="qt.html#Dock-enum">Minimized</a> (有效地一个“隐藏”锚接区域)和<a href="qt.html#Dock-enum">TornOff</a>(浮动)。关于这些区域的解释请参考<a href="qt.html#Dock-enum">Qt::Dock</a>。注意*ToolBar函数被考虑向后兼容,所有的新代码都应该使用*DockWindow函数。QToolBar是<a href="qdockwindow.html">QDockWindow</a>的子类,所以所有对于锚接窗口能工作地函数对于工具条也一样可以工作。如果用户通过点击锚接窗口地窗口句柄来最小化一个锚接窗口,那么锚接窗口将会被移到<a href="qt.html#Dock-enum">Minimized</a>锚接区域。如果用户点击关闭按钮,那么锚接窗口被隐藏并且只能再次通过使用<a href="#dwm">锚接窗口菜单</a>来再次被显示。
<p> 一些函数会全局地改变QMainWindow的外观:
<ul>
<li>QDockWindow::setHorizontalStretchable()和<a href="qdockwindow.html#setVerticalStretchable">QDockWindow::setVerticalStretchable</a>()被用于指定锚接窗口和工具条是可延伸的。
<li>setUsesBigPixmaps()被用于设置工具按钮是应该用小像素映射还是大像素映射(更多信息请参考<a href="qiconset.html">QIconSet</a>)。
<li>setUsesTextLabel()被用于设置工具按钮是否应该在显示像素映射之外还显示文本标签(更多信息请参考<a href="qtoolbutton.html">QToolButton</a>)。
</ul>
<p> 用户可以把锚接窗口拖入任何生效的锚接区域中。锚接窗口也可以在一个锚接区域<em>中</em>被拖动,例如重新排列一些工具条的顺序。锚接窗口也可以被拖动出任何锚接区域(取消锚接或者“浮动”)。你可以使用<a href="#setDockWindowsMovable">setDockWindowsMovable</a>()把锚接窗口设置为生效的(默认)和失效的。<a name="dwm">如果用户点击浮动锚接窗口的关闭按钮,然后锚接窗口将会消失。</a>为了重新得到锚接窗口,用户必须右键点击一个锚接区域,弹出一个锚接窗口菜单,然后点击我们要恢复的锚接窗口的名字。可视的锚接窗口在菜单中它们的名字之前有一个勾。锚接窗口菜单会根据<a href="#createDockWindowMenu">createDockWindowMenu</a>()的需要自动被创建。因为它可能不总是适合把一个锚接窗口显示到这个菜单中,<a href="#setAppropriate">setAppropriate</a>()函数被用来告知主窗口这个锚接窗口菜单是否应该包含一个特定的锚接窗口。双击锚接窗口句柄(通常在锚接窗口的左侧)会使这个锚接窗口取消锚接(浮动)。双击浮动锚接窗口的标题栏将会锚接这个浮动的锚接窗口。
<p> <a href="qt.html#Dock-enum">Minimized</a>边缘是一个隐藏的锚接区域。如果这个锚接区域是生效的,用户可以隐藏(最小化)锚接窗口或者通过点击锚接窗口句柄显示(恢复)一个最小化的锚接窗口。如果用户在一个句柄上方悬浮鼠标光标,锚接窗口的标题会被作为工具提示显示(请参考<a href="qwidget.html#caption">QDockWindow::caption</a>()或<a href="qtoolbar.html#label">QToolBar::label</a>()),所以如果你使<a href="qt.html#Dock-enum">Minimized</a>锚接区域生效,最好为每一个锚接窗口指定一个有意义的标题或者标签。为了能够程序化地最小化一个锚接窗口,请使用一个带有<a href="qt.html#Dock-enum">Minimized</a>边缘的<a href="#moveDockWindow">moveDockWindow</a>()。
<p> 锚接窗口默认是被透明地移动,也就是在拖动期间,一个边框矩形会在屏幕上被绘制出来呈现锚接窗口在移动时的位置。如果你想让锚接窗口在移动时被正常显示,请使用<a href="#setOpaqueMoving">setOpaqueMoving</a>()。
<p> 锚接窗口的定位,也就是它的锚接区域和在锚接区域中的位置,可以通过调用<a href="#getLocation">getLocation</a>()来被决定。可移动的锚接窗口可以通过<a href="#lineUpDockWindows">lineUpDockWindows</a>()被排列成一行来使浪费的空间最小化。锚接区域的指针可以由<a href="#topDock">topDock</a>()、<a href="#leftDock">leftDock</a>()、<a href="#rightDock">rightDock</a>()和<a href="#bottomDock">bottomDock</a>()提供。如果<a href="#isCustomizable">isCustomizable</a>()返回真(它默认返回假),一个自定义的菜单项会被添加入弹出的锚接窗口菜单。如果你想提供这个额外的菜单项,重新实现isCustomizable()和<a href="#customize">customize</a>(),例如,允许用户改变和主窗口以及它的工具条和锚接窗口相关的设置。
<p> 主窗口的菜单条默认是固定的(在上面)。如果你想有一个可移动的菜单条,创建一个<a href="qmenubar.html">QMenuBar</a>作为一个在它自己可移动的锚接窗口中可伸展的窗口部件并且限制这个锚接窗口只在<a href="qt.html#Dock-enum">Top</a>或<a href="qt.html#Dock-enum">Bottom</a>锚接区域存在:
<p> <pre>
    <a href="qtoolbar.html">QToolBar</a> *tb = new <a href="qtoolbar.html">QToolBar</a>( this );
    <a href="#addDockWindow">addDockWindow</a>( tb, tr( "Menubar" ), Top, FALSE );
    <a href="qmenubar.html">QMenuBar</a> *mb = new <a href="qmenubar.html">QMenuBar</a>( tb );
    mb-&gt;<a href="qframe.html#setFrameStyle">setFrameStyle</a>( QFrame::NoFrame );
    tb-&gt;<a href="qtoolbar.html#setStretchableWidget">setStretchableWidget</a>( mb );
    <a href="#setDockEnabled">setDockEnabled</a>( tb, Left, FALSE );
    <a href="#setDockEnabled">setDockEnabled</a>( tb, Right, FALSE );
    </pre>
 
<p> 有多个锚接窗口的应用程序可以选择为了以后(例如,在下个对话中)恢复当前的锚接窗口布局来把它们保存起来。你可以通过使用QMainWindow的流操作符来做到这点。
<p> 为了保存所有锚接窗口的布局和位置,请这样做:
<p> <pre>
  <a href="qfile.html">QFile</a> f( filename );
  if ( f.<a href="qfile.html#open">open</a>( <a href="qfile.html#open">IO_WriteOnly</a> ) ) {
      <a href="qtextstream.html">QTextStream</a> ts( &amp;f );
      ts &lt;&lt; *mainWindow;
      f.<a href="qfile.html#close">close</a>();
  }
  </pre>
 
<p> 为了恢复锚接窗口的位置和大小(通常是当这个应用程序再次开始),请这样做:
<p> <pre>
  <a href="qfile.html">QFile</a> f( filename );
  if ( f.<a href="qfile.html#open">open</a>( <a href="qfile.html#open">IO_ReadOnly</a> ) ) {
      <a href="qtextstream.html">QTextStream</a> ts( &amp;f );
      ts &gt;&gt; *mainWindow;
      f.<a href="qfile.html#close">close</a>();
  }
  </pre>
 
<p> <a href="qsettings.html">QSettings</a>类可以和这些流操作符联合使用来存放这个应用程序的设置。
<p> QMainWindow对锚接窗口和工具条的管理很明显地是由<a href="qdockarea.html">QDockArea</a>在后面完成的。
<p> 对于多文档界面(MDI),使用<a href="qworkspace.html">QWorkspace</a>作为中央窗口部件。
<p> 把锚接窗口(例如工具条)添加到QMainWindow的锚接区域是很简单的。如果被提供的锚接区域对于你的应用程序是不够的,我们建议你创建一个<a href="qwidget.html">QWidget</a>的子类并且把你自己的锚接区域(请参考<a href="qdockarea.html">QDockArea</a>)添加到这个子类中,因为QMainWindow只提供了由它提供的标准锚接区域的特定功能。
<p> <img src=qmainwindow-m.png> <img src=qmainwindow-w.png>
<p> <p>也可以参考<a href="qtoolbar.html">QToolBar</a>、<a href="qdockwindow.html">QDockWindow</a>、<a href="qstatusbar.html">QStatusBar</a>、<a href="qaction.html">QAction</a>、<a href="qmenubar.html">QMenuBar</a>、<a href="qpopupmenu.html">QPopupMenu</a>、<a href="qtooltipgroup.html">QToolTipGroup</a>、<a href="qdialog.html">QDialog</a>和<a href="application.html">主窗口和相关类</a>。

<hr><h2>成员类型文档</h2>
<h3 class=fn><a name="DockWindows-enum"></a>QMainWindow::DockWindows</h3>
<p> 右键点击锚接区域会弹出锚接窗口菜单(<a href="#createDockWindowMenu">createDockWindowMenu</a>()被自动调用)。当被调用时,在代码中你可以通过这个枚举变量指定哪些项应该出现在菜单中。
<ul>
<li><tt>QMainWindow::OnlyToolBars</tt> - 菜单将会列出所有的工具条,但没有任何其它锚接窗口。
<li><tt>QMainWindow::NoToolBars</tt> - 菜单将会列出除工具条之外的所有的锚接窗口。
<li><tt>QMainWindow::AllDockWindows</tt> - 菜单将会列出所有的工具条和其它锚接窗口。(这是默认值。)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -