Qt开发总结(8)——窗体之MainWindow

MainWindow是一种特殊的Widget,它拥有工具栏QToolBar, 菜单栏 QMenuBar, 和状态栏QStatusBar,并且可以设计停靠窗体和中心窗体,典型的MainWindow构架如下图所示。

Center Widget

特别地,创建一个MainWindow必须创建center widget,哪怕是个空的widget。通常来说,center widget是标准的Qt Widget,比如QTextEdit,QGraphicsView等等。当然也可以自己创建一个新的widget,用setCentralWidget()函数设置某个widget为center widget。

MainWindow有SDI(单文档)和MDI(多文档)两种,对于MDI可以创建QMdiArea作为center widget。QMainWindow可以将当前的布局通过saveState()保存下来,等到用restoreState()来恢复。

Menubars

QMainWindow用QMenuBar实现了一些QMenu。在这些Menus上添加QActions,就会显示为菜单栏的下拉菜单。可以通过menuBar()获取QMenuBar,进而调用QMenuBar::addMenu()添加新的菜单选项。QMainWindow 可以在新建工程的时候选择默认的菜单栏,也可以在程序中添加自己定义的菜单栏。

void MainWindow::createMenus()
{
      fileMenu = menuBar()->addMenu(tr("&File"));
      fileMenu->addAction(newAct);
      fileMenu->addAction(openAct);
      fileMenu->addAction(saveAct);
}

Toolbars

工具栏通过QToolBar类实现。调用addToolBar()可以为MainWindow添加新的工具栏,创建时,Qt::ToolBarArea可以指定工具栏的位置(左上右下)。也可以调用addToolBarBreak() 或者insertToolBarBreak()在工具栏中间插入一个分隔符。可以用QToolBar::setAllowedAreas()和QToolBar::setMovable()限制工具栏的位置和移动。每个工具栏的图标大小可以由iconSize()限制,可以调用setIconSize修改它,甚至调用setToolButtonStyle修改显示效果。

void MainWindow::createToolBars()
{
      fileToolBar = addToolBar(tr("File"));
      fileToolBar->addAction(newAct);
}

Dock Widgets

QDockWidget 的对象可以生成Dock widgets。Dock Widget是一种可以停靠在MainWindow中的窗体,可以调用addDockWidget()将Dock Widgets添加到MainWindow中。在MainWindow中有四个可停靠区域,分别是Qt::DockWidgetArea enum: left, right, top, and bottom。用setCorner()函数指定哪个Dock Widget可以占用corners。默认每个区域都只可以包含一行dock widgets,但是如果你打开了网格功能setDockNestingEnabled(), dock widgets就可以任意组合了。两个dock widgets也可能形成Tab窗体显示,这也是一种停靠方式。     

QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

Status Bar

通过statusBar()获取main window's status bar,返回对象是QStatusBar。用setStatusBar()设置状态栏。状态栏提供了一个水平的进度条以显示当前状态信息。

用showMessage()槽函数来显示短暂的信息,用clearMessage()清除信息,

void MainWindow::createStatusBar()
{
      statusBar()->showMessage(tr("Ready"));
}

正常的和永久的信息通过创建一个小的窗体,如QLabel, QProgressBar或者QToolButton,然后把它们用addWidget()或addPermanentWidget()添加的toolbar中来实现。用removeWidget()函数来清除这心信息。

statusBar()->addWidget(new MyReadWriteIndication);

code example

这里有个比较不错的MainWindow例子,可以移步本人下载频道:QtMainWindow

发布了76 篇原创文章 · 获赞 63 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/bjtuwayne/article/details/100173937