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、将QMenuaboutToShow信号与自定义的槽函数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

『定义』



『构造函数』


。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


『析构函数』

使用默认析构函数

原创粉丝点击