Qt进修之路(12):菜单和东西条
副标题#e#
在前面的QMainWindow的基本之上,我们开始着手制作我们的应用措施。固然此刻已经有一个框架,可是,确切地说我们还一行代码没有写呢!下面的事情就不那么简朴了!在这一节内里,我们要为我们的框架添加菜单和东西条。
就像Swing内里的Action一样,Qt内里也有一个雷同的类,叫做QAction。顾名思义,QAction类生存有关于这个行动,也就是action的信息,好比它的文本描写、图标、快捷键、回调函数(也就是信号槽),等等。神奇的是,QAction可以或许按照添加的位置来改变本身的样子 ——假如添加到菜单中,就会显示成一个菜单项;假如添加到东西条,就会显示成一个按钮。这也是为什么要把菜单和按钮放在一节内里。下面开始进修!
首先,我想添加一个打开呼吁。那么,就在头文件内里添加一个私有的QAction变量:
class QAcion;
//...
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添加到了上面。
#p#副标题#e#
好了,主要的代码已经写完了。不外,假如你只修改这些的话,是编译不外的哦!因为像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
#p#分页标题#e#
#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实现的呢!
出处: http://devbean.blog.51cto.com/448512/205034