博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt5学习笔记 | 给窗口添加动作
阅读量:5139 次
发布时间:2019-06-13

本文共 2879 字,大约阅读时间需要 9 分钟。

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

具体示例代码:

1 // !!! Qt 5 2 // ========== mainwindow.h 3 #ifndef MAINWINDOW_H 4 #define MAINWINDOW_H 5   6 #include 
7 8 class MainWindow : public QMainWindow 9 {10 Q_OBJECT11 public:12 MainWindow(QWidget *parent = 0);13 ~MainWindow();14 15 private:16 void open();17 18 QAction *openAction;19 };20 21 #endif // MAINWINDOW_H22 23 // ========== mainwindow.cpp24 #include
25 #include
26 #include
27 #include
28 #include
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 
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

你可能感兴趣的文章
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
【转】从头到尾彻底理解KMP
查看>>
ios应用版本号设置规则
查看>>
海上孤独的帆
查看>>
error: more than one device and emulator 问题解决
查看>>
Java基础:容器
查看>>
YUV摘要格式
查看>>
【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录
查看>>
C# CheckedListBox控件的使用方法
查看>>
【HDOJ】2007平方和与立方和
查看>>
js中const,var,let区别
查看>>
SharePoint自定义程序页面部署 不用重启IIS
查看>>
2014-11-30-2333-Java-数组
查看>>
Nginx 自动补全url地址补全最后的斜线
查看>>
【SQL Server 2008 安装全过程】
查看>>
xml的解析及案例的分析和分享
查看>>
[译] 盘点CSS3中的新特性
查看>>
Test
查看>>
猜字母
查看>>
POJ 2421 Constructing Roads(最小生成树)
查看>>