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

简介:
前面一节我们已经把QAction添加到菜单和工具条上面。现在我们要添加一些图片美化一下,然后把信号槽加上,这样,我们的action就可以相应啦!
 
首先来添加图标。QAction的图标会显示在菜单项的前面以及工具条按钮上面显示。
 
为了添加图标,我们首先要使用Qt的资源文件。在QtCreator的项目上右击,选择New File...,然后选择resource file。
 
 
然后点击next,选择好位置,Finish即可。为了使用方便,我就把这个文件建在根目录下,建议应该在仔细规划好文件之后,建在专门的rsources文件夹下。完成之后,生成的是一个.qrc文件,qrc其实是Qt Recource Collection的缩写。它只是一个普通的XML文件,可以用记事本等打开。不过,这里我们不去深究它的结构,完全利用QtCreator操作这个文件,
 
 
点击Add按钮,首先选择Add prefix,然后把生成的/new/prefix改成/。这是prefix就是以后使用图标时需要提供的前缀,以/开头。添加过prefix之后,然后在工程文件中添加一个图标,再选择Add file,选择那个图标。这样完成之后保存qrc文件即可。
 
说明一下,QToolBar的图标大小默认是32*32,菜单默认是16*16。如果提供的图标小于要求的尺寸,则不做操作,Qt不会为你放大图片;反之,如果提供的图标文件大于相应的尺寸要求,比如是64*64,Qt会自动缩小尺寸。
 
 
图片的路径怎么看呢?可以看出,Qt的资源文件视图使用树状结构,根是/,叶子节点就是图片位置,连接在一起就是路径。比如这张图片的路径就是/Open.png。
 
注意,为了简单起见,我们没有把图标放在专门的文件夹中。正式的项目中应该单独有一个resources文件夹放资源文件的。
 
然后回到前面的mainwindow.cpp,在构造函数中修改代码:
 
InBlock.gifopenAction =  new QAction(tr( "&Open"),  this); 
InBlock.gifopenAction->setShortcut(QKeySequence::Open); 
InBlock.gifopenAction->setStatusTip(tr( "Open a file.")); 
InBlock.gifopenAction->setIcon(QIcon( ":/Open.png"));  // Add code.
 
我们使用setIcon添加图标。添加的类是QIcon,构造函数需要一个参数,是一个字符串。由于我们要使用qrc中定义的图片,所以字符串以 : 开始,后面跟着prefix,因为我们先前定义的prefix是/,所以就需要一个/,然后后面是file的路径。这是在前面的qrc中定义的,打开qrc看看那张图片的路径即可。
 
好了,图片添加完成,然后点击运行,看看效果吧!
 
 
瞧!我们只需要修改QAction,菜单和工具条就已经为我们做好了相应的处理,还是很方便的!
 
下一步,为QAction添加事件响应。还记得Qt的事件响应机制是基于信号槽吗?点击QAction会发出triggered()信号,所以,我们要做的是声名一个slot,然后connect这个信号。
 
mainwindow.h
 
InBlock.gif class MainWindow :  public QMainWindow 
InBlock.gif
InBlock.gif        Q_OBJECT 
InBlock.gif 
InBlock.gif public
InBlock.gif        MainWindow(QWidget *parent = 0); 
InBlock.gif        ~MainWindow(); 
InBlock.gif 
InBlock.gif private slots: 
InBlock.gif         void open();         
InBlock.gif 
InBlock.gif private
InBlock.gif        QAction *openAction; 
InBlock.gif};
 
因为我们的open()目前只要在类的内部使用,因此定义成private slots即可。然后修改cpp文件:
 
InBlock.gifMainWindow::MainWindow(QWidget *parent) 
InBlock.gif        : QMainWindow(parent) 
InBlock.gif
InBlock.gif        openAction =  new QAction(tr( "&Open"),  this); 
InBlock.gif        openAction->setShortcut(QKeySequence::Open); 
InBlock.gif        openAction->setStatusTip(tr( "Open a file.")); 
InBlock.gif        openAction->setIcon(QIcon( ":/Open.png")); 
InBlock.gif        connect(openAction, SIGNAL(triggered()),  this, SLOT(open())); 
InBlock.gif 
InBlock.gif        QMenu *file = menuBar()->addMenu(tr( "&File")); 
InBlock.gif        file->addAction(openAction); 
InBlock.gif 
InBlock.gif        QToolBar *toolBar = addToolBar(tr( "&File")); 
InBlock.gif        toolBar->addAction(openAction); 
InBlock.gif
InBlock.gif 
InBlock.gif void MainWindow::open() 
InBlock.gif
InBlock.gif        QMessageBox::information(NULL, tr( "Open"), tr( "Open a file")); 
InBlock.gif}
 
注意,我们在open()函数中简单的弹出一个标准对话框,并没有其他的操作。编译后运行,看看效果:
 
 
好了,关于QAction的动作也已经添加完毕了!
 
至此,QAction有关的问题先告一段落。最后说一下,如果你还不知道怎么添加子菜单的话,看一下QMenu的API,里面会有一个addMenu函数。也就是说,创建一个QMenu然后添加就可以的啦!

本文转自 FinderCheng 51CTO博客,原文链接:
http://blog.51cto.com/devbean/205958

相关文章
|
5月前
|
存储 C++
基于Qt的简易文件压缩与解压缩工具设计与实现
基于Qt的简易文件压缩与解压缩工具设计与实现
255 1
|
5月前
|
搜索推荐 区块链 C++
C++ Qt开发:ToolBar与MenuBar菜单组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`ToolBar`工具栏组件以及与之类似的`MenuBar`菜单栏组件的常用方法及灵活运用。
331 1
|
4天前
|
定位技术 Go 开发工具
dynamic-situational-awareness-qt学习记录
本文是作者yantuguiguziPGJ关于dynamic-situational-awareness-qt学习记录的分享,介绍了在Qt学习过程中发现的qml资源丰富的代码仓库,并提供了资源路径和相关的安装、配置步骤,涉及的内容有数字地球、GIS纹理等,同时提供了相关链接和git命令来克隆代码仓库和ArcGIS Runtime SDK for Qt的安装说明。
|
3月前
|
C++
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
|
3月前
|
开发者
Qt中的事件该如何学习?(附带案例)
事件是Qt中比较重要的一部分,在初期如果理解不当学习可能会比较困难,这里提一嘴当初教我的那位老师水平是真的高,让我很轻易的就理解了事件的概念。 在平时我们见到那些界面上的某些快捷键就有可能是事件做的,例如ESC关闭窗口,Enter提交或者登录这种类似的,这也是事件的强大之处。
|
4月前
|
前端开发
自定义QT QWidget对象响应弹出菜单的解决方法
自定义QT QWidget对象响应弹出菜单的解决方法
56 1
|
5月前
|
安全
Qt日志工具--QsLog
Qt日志工具--QsLog
132 1
|
5月前
|
程序员 开发工具 索引
【Qt 学习笔记】认识QtSDK中的重要工具
【Qt 学习笔记】认识QtSDK中的重要工具
61 0
|
5月前
Qt实现的多菜单选择界面
Qt实现的多菜单选择界面
84 0
|
5月前
QT实现植物大战僵尸中文版工具代码
QT实现植物大战僵尸中文版工具代码
下一篇
无影云桌面