Qt5学习笔记 | 给窗口添加动作

Qt 使用QAction类作为动作。这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。

具体示例代码:

 1 // !!! Qt 5
 2 // ========== mainwindow.h
 3 #ifndef MAINWINDOW_H
 4 #define MAINWINDOW_H
 5  
 6 #include <QMainWindow>
 7  
 8 class MainWindow : public QMainWindow
 9 {
10     Q_OBJECT
11 public:
12     MainWindow(QWidget *parent = 0);
13     ~MainWindow();
14  
15 private:
16     void open();
17  
18     QAction *openAction;
19 };
20  
21 #endif // MAINWINDOW_H
22  
23 // ========== mainwindow.cpp
24 #include <QAction>
25 #include <QMenuBar>
26 #include <QMessageBox>
27 #include <QStatusBar>
28 #include <QToolBar>
29  
30 #include "mainwindow.h"
31  
32 MainWindow::MainWindow(QWidget *parent) :
33     QMainWindow(parent)
34 {
35     setWindowTitle(tr("Main Window"));
36  
37     openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);
38     openAction->setShortcuts(QKeySequence::Open);
39     openAction->setStatusTip(tr("Open an existing file"));
40     connect(openAction, &QAction::triggered, this, &MainWindow::open);
41  
42     QMenu *file = menuBar()->addMenu(tr("&File"));
43     file->addAction(openAction);
44  
45     QToolBar *toolBar = addToolBar(tr("&File"));
46     toolBar->addAction(openAction);
47  
48     statusBar() ;
49 }
50  
51 MainWindow::~MainWindow()
52 {
53 }
54  
55 void MainWindow::open()
56 {
57     QMessageBox::information(this, tr("Information"), tr("Open"));
58 }

main函数:

 1 #include "mainwindow.h"
 2 #include <QApplication>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication app(argc, argv);
 7 
 8     MainWindow win;
 9     win.show();
10 
11     return app.exec();
12 }

 

第37行,我们在堆上创建了openAction对象。在QAction构造函数,我们传入了一个图标、一个文本和 this 指针。

    openAction = new QAction(QIcon(":/images/doc-open"), tr("&Open..."), this);

图标我们使用了QIcon,传入值是一个字符串,这个字符串对应于 Qt 资源文件中的一段路径。(注:这个路径在我的qt5.9.2中是不存在的,这导致了原来的地方没有了图标,不知道是不是由于版本差异导致与原作者不同。)

 

第38行,我们使用了setShortcut()函数,用于说明这个QAction的快捷键。

    openAction->setShortcuts(QKeySequence::Open);

 Qt 的QKeySequence为我们定义了很多内置的快捷键,比如我们使用的 Open。你可以通过查阅 API 文档获得所有的快捷键列表。 这个与我们自己定义的有什么区别呢?简单来说,我们完全可以自己定义一个tr("Ctrl+O")来实现快捷键。原因在于,这是 Qt 跨平台性的体现。比如 PC 键盘和 Mac 键盘是不一样的,一些键在 PC 键盘上有,而 Mac 键盘上可能并不存在,或者反之。使用QKeySequence类来添加快捷键,会根据平台的不同来定义相应的快捷键。

 

39行,setStatusTip()则实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示。

    openAction->setStatusTip(tr("Open an existing file"));

 

40行的connect()函数,将这个QActiontriggered()信号与MainWindow类的open()函数连接起来。当用户点击了这个QAction时,会自动触发MainWindowopen()函数。

    connect(openAction, &QAction::triggered, this, &MainWindow::open);

 

42-43行:

    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);

向菜单栏添加了一个 File 菜单,并且把这个QAction对象添加到这个菜单。

 

45-46行:

    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);

新增加了一个 File 工具栏,也把QAction对象添加到了这个工具栏。

 

48行的statusBar()则是创建了一个状态栏。

具体的内容可能会在后文学到。

 

原文:https://www.devbean.net/2012/08/qt-study-road-2-action/

转载于:https://www.cnblogs.com/fategrandorder/p/9095347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值