Qt应用程序之Application Main Window详解
来源:互联网 发布:搜索引擎优化广告 编辑:程序博客网 时间:2024/06/05 17:20
Qt应用程序之Application Main Window详解
【主窗口类概览】
下面的类提供了创建典型现代主窗口应用程序的所有事物,例如:主窗口自身,菜单以及工具栏,状态栏等等。
【主窗口类】
Qt 提供了下面的类用于管理主窗口以及与用户界面关联的组件:
*QmainWindow是构建应用程序主要的类。与接下来的QDockWidget和QToolBar类相比,它代表了应用程序顶级的用户界面。
*QDockWidget提供了用于创建工具面板或者是帮助窗口的组件。Dock widgets保持自己的属性,可以移动,关闭或者是作为外部 窗口浮动。
*QtoolBar提供了通用的工具栏部件,可以保持几个跟动作相关的部件,例如:按钮,菜单等等。它可以与菜单以及键盘很好的合 作。
【示例代码】
使用QMainWindow是最直接的方式。一般情况下,我们都会继承自QMainWindow并且在其构造函数中设置菜单,工具栏和菜单栏以及dock widgets部件。
将菜单添加到主窗口中十分简单,只需要创建菜单,将菜单添加到主窗口的菜单栏上。注意,在第一次调用QMainWindow::menuBar()函数在第一次被调用的时候就会创建菜单栏。你也可以调用QMainWindow::setMenuBar()设置自定义的菜单栏。
一旦动作被创建,我们就可以将他们添加到主窗口部件上,首先我们将他们添加到菜单上:
QtoolBar和QMenu类使用了Qt的action系统来提供一致的API。在上面的代码中,我们使用QMenu::addAction()函数将已经存在的actions添加到file菜单中。QToolBar也提供了这个函数,这使得我们可以在主窗口的不同地方重用actions。这就避免了一些不必要的重复的劳动。
我们创建了主创口的工具栏,并且将期望的动作添加上去:在这个示例中,工具栏被限制在主窗口的顶部和底部,并且初始化是放置在主创口的顶部工具栏的。我们可以看到newAct和openAct同时显示在工具栏和file菜单上。
QDockWidget通常以类似QToolBar的方式使用。我们创建一个dockwidget作为主创口的子窗口部件,并且为dock widget添加它自己的子窗口部件。
在这个示例中,dock widget仅仅可以被放置在左边和右边的dock区域,并且初始是放置在左边的dock区域。
QMainWindow API允许程序员将dock widget放置在四个角落的dockwidget区域。如果需要,我们可以使用 QMainWindown::setCorner()函数改变默认情况。
下面的图显示了上面代码展示的配置过程。注意,左边和右边的dockarea包括顶部和底部的拐角。
一旦主窗口的所有组件都被设置起来了,那么我们可以如下创建主窗口并且安装它。中心部件可以是QWidget的任何子类。
【示例】
下载Qt的源代码,可以自行编译这些示例程序,如下是我们自己编译main window示例程序:
下面是运行后的效果,这个程序作为main window示例程序实在是非常好:
【源码分析】
1、首先来看一下代码结构和.pro工程文件的内容:
2、分析一下里面包含的一些类
本示例主要包括三个类:ColorSwatch、ToolBar以及MainWindow。
ColorSwatch:继承自QDockWidget,应用程序的dock widget。
ToolBar:继承自QToolBar,应用程序的工具栏。
MainWindow:继承自QMainWindow,应用程序的主窗口。
3、应用程序的启动
4、代码剖析
首先看看MainWIndow的构造函数,其实就是前面介绍到的内容:设置Menu,ToolBar,以及DockWidget:
首先是设置中心窗口为QTextEdit;接着是创建ToolBar(工具栏)
setupToolBar():创建ToolBar对象,添加到主窗口的工具栏中。
setupMenuBar():创建主窗口的菜单项。
setupDockWidgets():用于创建dock widget窗口部件。
【总结】
以上就是整个mainwindows示例程序的整体结构了,把握住了整体结构再来看代码的细节处理就容易许多了,至于细节部分在此就不罗列了。
【附录】
最后,我们来看看几个主要的类的实现:ToolBar和ColorSwatch。
*ToolBar
『定义』
『构造函数』
。。。。。。。。。。。。。。
1、该构造函数就是根据传入的字符串构建相应的菜单和工具栏,从mainwindow.cpp中我们知道构造了三个工具栏(菜单),菜单的名称是“Tool Bars”。
2、将QMenu的aboutToShow信号与自定义的槽函数updateMenu关联起来。可以在Qt Creator中将光标停留在QMenu上,按下F1键,就会出现上下文帮助信息,这里来看看aboutToshow这个信号在何时发射:aboutToshow信号是在菜单显示之前发射的,也就是初始化的时候使用到。
下面我们主要来看一下与之关联的槽函数updateMenu的实现:
该槽函数首先获取主窗口,然后获取主窗口的工具栏区域,根据主窗口可以将ToolBar放置在哪几个区域来初始化Action(也即对应的菜单项)选中与否。
接下来的就是其它的几个槽函数:ToolBar::order();ToolBar::randomize();ToolBar::addSpinBox();ToolBar::removeSpinBox(),这些槽函数都跟具体的Action关联:
【1】槽函数ToolBar::order()的实现:
该函数的功能是按照一定的顺序排列工具栏中的actions,具体做法就是获取所有的actions之后再按照一定的顺序添加到一个QList<QAction*> ordered列表中,再清除原先的actions,最后再添加具有一定顺序的ordered,具体代码如下:
【2】槽函数ToolBar::randomize()的实现:
该函数的功能是随机的排列工具栏上的actions,具体做法就是先获取所有的actions之后再随机的将这些actions逐一添加到一个QList<QAction*> randomized列表中,再清除原先的actions,最后再添加具有随机顺序的randomized,具体代码如下:
【3】槽函数ToolBar::addSpinBox()的实现:
该函数的功能是判断toolbar上是否已经添加了一个QSpinBox,如果添加了,那么去使能add操作,使能remove操作,添加后的效果如下:
代码实现如下:
【4】槽函数ToolBar::removeSpinBox()的实现:
该函数的功能与上面的相反,判断如果已经添加了一个QSpinBox,则删除,并且使能add操作,去使能remove操作。
代码实现如下:
『析构函数』
使用默认析构函数
*ColorSwatch
『定义』
『构造函数』
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
『析构函数』
使用默认析构函数
- Qt应用程序之Application Main Window详解
- Qt中main函数详解
- QT Demo 之 window
- QT Demo 之 window
- Qt给Window应用程序添加桌面图标
- QT 应用程序之计算器
- Qt Main Window——主窗口及其主要组成部分
- QT Demo 之 window(5) window.qml
- QT Demo 之 window(5) window.qml
- QT Demo 之 window(3) Qt.quit()
- QT Demo 之 calqlatr(1) main.cpp
- Qt之重启应用程序
- Qt之添加应用程序图标
- Qt之设置应用程序图标
- Qt之应用程序打包发行
- 【Qt】Qt之重启应用程序【转】
- 【转载】Android详解之---Application
- SDK编程之理解Window应用程序框架
- 行为型模式之命令模式(Command)
- 测试工具 NUnit
- The connection to adb is down, and a severe error has occured.
- VS中Resharper的Todo item自定义
- Android OTA升级过程
- Qt应用程序之Application Main Window详解
- android应用之测试利器--StrictMode(未完成,待续)
- Linux应用编程之Socket编程
- 数据库记录中重复的某些字段的数据筛选
- PHP将来或推出移动版
- 搜集一些git的资料
- 经典的贪心算法 Journey with Pigs (POJ 3544)
- Qt5中关于OpenGL部分的学习
- 求职心态