QAction 类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。因此,Qt 并没有专门的菜单项类,只是使用一个 QAction 类,抽象出公共的动作。当我们把QAction 对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。
图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。当把一个 QAction对象添加到程序中时, Qt 自己选择使用哪个属性来显示,无需我们关心。同时, Qt 能够保证把 QAction 对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说,如果我们在菜单中修改了 QAction 的图标,那么在工具栏上面这个 QAction 所对应的按钮的图标也会同步修改。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
void open();
QAction *openaction;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QAction>//动作
#include <QMenuBar>//菜单栏
#include <QMessageBox>//消息提示框
#include <QToolBar>//工具栏
#include <QStatusBar>//状态栏
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("呵呵");
this->setMinimumSize(300,300);
/*
* 在 QAction 构造函数,我们传入了一个图标、一个文本和 this 指针。
* 图标我们使用了 QIcon,传入值是一个字符串,这个字符串对应于 Qt 资源文件中的一段路径。
* 以 : 开始,意味着从资源文件中查找资源。
* QAction 第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。
* 下面一句,我们使用了 setShortcut() 函数,用于说明这个 QAction 的快捷键。 Qt 的
* QKeySequence 为我们定义了很多内置的快捷键,比如我们使用的 Open。
* setStatusTip() 则实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示。
*后面的 connect() 函数, 将这个 QAction 的 triggered() 信号与 MainWindow 类的
* open() 函数连接起来。当用户点击了这个 QAction 时,会自动触发 MainWindow 的 open() 函数。
*/
openaction=new QAction(QIcon(":/new/prefix1/ico"),tr("&Open"),this);
openaction->setShortcuts(QKeySequence::Open);
openaction->setStatusTip(tr("open an existing file"));
connect(openaction,&QAction::triggered,this,&MainWindow::open);
/*
*下面的 maneBar()、 toolBar() 和 statusBar() 三个是 QMainWindow 的函数,用于创建并返回
* 菜单栏、工具栏和状态栏。我们可以从代码清楚地看出,我们向菜单栏添加了一个 File 菜单,
* 并且把这个 QAction 对象添加到这个菜单;同时新增加了一个 File 工具栏,也把 QAction 对
* 象添加到了这个工具栏。我们可以看到,在菜单中,这个对象被显示成一个菜单项,在工具栏变
* 成了一个按钮。至于状态栏,则是出现在窗口最下方,用于显示动作对象的提示信息的
*/
QMenu *file=menuBar()->addMenu(tr("&File"));
file->addAction(openaction);
QToolBar *toolbar=addToolBar(tr("&File"));
toolbar->addAction(openaction);
QStatusBar *statusbar=statusBar();
statusbar->addAction(openaction);
}
void MainWindow::open(){
QMessageBox::information(this,tr("information"),tr("open"));
}
MainWindow::~MainWindow()
{
}