Qt学习之路(12): 菜单和工具条

简介:
在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序。虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜单和工具条。
 
就像Swing里面的Action一样,Qt里面也有一个类似的类,叫做QAction。顾名思义,QAction类保存有关于这个动作,也就是action的信息,比如它的文本描述、图标、快捷键、回调函数(也就是信号槽),等等。神奇的是,QAction能够根据添加的位置来改变自己的样子——如果添加到菜单中,就会显示成一个菜单项;如果添加到工具条,就会显示成一个按钮。这也是为什么要把菜单和按钮放在一节里面。下面开始学习!
 
首先,我想添加一个打开命令。那么,就在头文件里面添加一个私有的QAction变量:
 
class QAction; 
//... 
private
        QAction *openAction; 
//...
 
注意,不要忘记QAction类的前向声明哦!要不就会报错的!
 
然后我们要在cpp文件中添加QAction的定义。为了简单起见,我们直接把它定义在构造函数里面:
 
        openAction =  new QAction(tr( "&Open"),  this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr( "Open a file."));
 
第一行代码创建一个QAction对象。QAction有几个重载的构造函数,我们使用的是
 
QAction( const QString &text, QObject* parent);
 
这一个。它有两个参数,第一个text是这个动作的文本描述,用来显示文本信息,比如在菜单中的文本;第二个是parent,一般而言,我们通常传入this指针就可以了。我们不需要去关心这个parent参数具体是什么,它的作用是指明这个QAction的父组件,当这个父组件被销毁时,比如delete或者由系统自动销毁,与其相关联的这个QAction也会自动被销毁。
 
如果你还是不明白构造函数的参数是什么意思,或者说想要更加详细的了解QAction这个类,那么就需要自己翻阅一下它的API文档。前面说过有关API的使用方法,这里不再赘述。这也是学习Qt的一种方法,因为Qt是一个很大的库,我们不可能面面俱到,因此只为说道用到的东西,至于你自己想要实现的功能,就需要自己去查文档了。
 
第二句,我们使用了setShortcut函数。shortcut是这个动作的快捷键。Qt的QKeySequence已经为我们定义了很多内置的快捷键,比如我们使用的Open。你可以通过查阅API文档获得所有的快捷键列表,或者是在QtCreator中输入::后会有系统的自动补全功能显示出来。这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")来实现快捷键。原因在于,这是Qt跨平台性的体现。比如PC键盘和Mac键盘是不一样的,一些键在PC键盘上有,而Max键盘上可能并不存在,或者反之,所以,推荐使用QKeySequence类来添加快捷键,这样,它会根据平台的不同来定义不同的快捷键。
 
第三句是setStatusTip函数。这是添加状态栏的提示语句。状态栏就是主窗口最下面的一条。现在我们的程序还没有添加状态栏,因此你是看不到有什么作用的。
 
下面要做的是把这个QAction添加到菜单和工具条:
 
        QMenu *file = menuBar()->addMenu(tr( "&File")); 
        file->addAction(openAction); 
 
        QToolBar *toolBar = addToolBar(tr( "&File")); 
        toolBar->addAction(openAction);
 
QMainWindow有一个menuBar()函数,会返回菜单栏,也就是最上面的那一条。如果不存在会自动创建,如果已经存在就返回那个菜单栏的指针。直接使用返回值添加一个菜单,也就是addMenu,参数是一个QString,也就是显示的菜单名字。然后使用这个QMenu指针添加这个QAction。类似的,使用addToolBar函数的返回值添加了一个工具条,并且把这个QAction添加到了上面。
 
好了,主要的代码已经写完了。不过,如果你只修改这些的话,是编译不过的哦!因为像menuBar()函数返回一个QMenuBar指针,但是你并没有include它的头文件哦!虽然没有明着写出QMenuBar这个类,但是实际上你已经用到了它的addMenu函数了,所以还是要注意的!
 
下面给出来全部的代码:
 
1. mainwindow.h
#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
 
#include <QtGui/QMainWindow> 
 
class QAction; 
 
class MainWindow :  public QMainWindow 

        Q_OBJECT 
 
public
        MainWindow(QWidget *parent = 0); 
        ~MainWindow(); 
 
private
        QAction *openAction; 
}; 
 
#endif  // MAINWINDOW_H
 
2. mainwindow.cpp
 
#include <QtGui/QAction> 
#include <QtGui/QMenu> 
#include <QtGui/QMenuBar> 
#include <QtGui/QKeySequence> 
#include <QtGui/QToolBar> 
#include  "mainwindow.h" 
 
MainWindow::MainWindow(QWidget *parent) 
        : QMainWindow(parent) 

        openAction =  new QAction(tr( "&Open"),  this); 
        openAction->setShortcut(QKeySequence::Open); 
        openAction->setStatusTip(tr( "Open a file.")); 
 
        QMenu *file = menuBar()->addMenu(tr( "&File")); 
        file->addAction(openAction); 
 
        QToolBar *toolBar = addToolBar(tr( "&File")); 
        toolBar->addAction(openAction); 

 
MainWindow::~MainWindow() 

 
}
 
main.cpp没有修改,这里就不给出了。下面是运行结果:
 
 
很丑,是吧?不过我们已经添加上了菜单和工具条了哦!按一下键盘上的Alt+F,因为这是我们给它定义的快捷键。虽然目前挺难看,不过以后就会变得漂亮的!想想看,Linux的KDE桌面可是Qt实现的呢!

本文转自 FinderCheng 51CTO博客,原文链接:

http://blog.51cto.com/devbean/205034
相关文章
|
4月前
|
搜索推荐 区块链 C++
C++ Qt开发:ToolBar与MenuBar菜单组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`ToolBar`工具栏组件以及与之类似的`MenuBar`菜单栏组件的常用方法及灵活运用。
87 1
|
4月前
|
C++ 索引
C++ Qt开发:Tab与Tree组件实现分页菜单
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`tabWidget`选择夹组件与`TreeWidget`树形选择组件,的常用方法及灵活运用。
58 0
C++ Qt开发:Tab与Tree组件实现分页菜单
|
4月前
[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小
[Qt5] 右键窗体弹出菜单,实现图像适应窗体大小
45 0
|
5月前
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
《QT从基础到进阶·九》菜单,菜单栏,工具栏创建
27 0
|
7月前
|
C++ Python
Python+QT美颜工具源码
Python+QT美颜工具源码
122 0
Python+QT美颜工具源码
|
Python Windows
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)详细教程
629 0
|
C++
C/C++ Qt Tree与Tab组件实现分页菜单
虽然`TreeWidget`组件可以实现多节点的增删改查,但多节点操作显然很麻烦,在一般的应用场景中基本上只使用一层结构即可解决大部分开发问题,`TreeWidget`组件通常可配合`TabWidget`组件,实现一个类似于树形菜单栏的功能,当用户点击菜单栏中的选项时则会跳转到不同的页面上。
289 0
C/C++ Qt Tree与Tab组件实现分页菜单
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前水平和垂直角度)
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0
产品分享:Qt数学函数公式学科工具,当前版本v1.0.0
项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加
项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加
项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加

热门文章

最新文章

推荐镜像

更多