找回密码
 立即注册

第4篇 基础(四)添加菜单图标——使用Qt资源文件

发表于 2013-3-25 19:55:14 | 显示全部楼层 |阅读模式
添加菜单图标——使用Qt资源文件

版权声明

该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处!


导语

       后面几篇里我们将介绍常用的Qt主窗口部件QMainWindow,主窗口部件就是一般的应用程序主窗口,它包含了菜单栏、工具栏、中心部件、状态栏和可停靠部件等。这一篇将着重介绍菜单的实现以及使用资源文件来添加菜单图标。

环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1


目录

一、添加主窗口菜单
二、添加菜单图标
三、添加资源文件
四、使用资源文件
五、使用代码来添加菜单和图标

正文


一、添加主窗口菜单

1.新建Qt Gui应用,项目名称为myMainWindow,基类选择QMainWindow,类名为MainWindow

2.创建完项目后,打开mainwindow.ui文件进入设计模式。在这里可以看到界面左上角的“在这里输入”,我们可以在这里添加菜单。双击“在这里输入”,将其更改为“文件(&F)”,然后按下回车键,效果如下图所示。这里的&F表明将菜单的快捷键设置为了Alt+ F,可以看到,实际的显示效果中&符号是隐藏的。

3.同样的方法,我们在文件菜单中添加“新建(&N)”子菜单,效果如下图所示。菜单后面的那个加号图标是用来创建下一级菜单的。

二、添加菜单图标

1.Qt中的一个菜单被看做是一个Action,我们在下面的Action编辑器中可以看到刚才添加的“新建”菜单,如下图所示。

2.双击该条目,会弹出编辑动作对话框,这里可以进行各项设置,比如我们可以设置菜单的快捷键,点击一下快捷键后面的行编辑器,然后按下键盘上的Ctrl + N,这样就可以将该菜单的快捷键设置为Ctrl + N。如下图所示。那么大家可能会问,既然该菜单的快捷键是这么设置的,那么前面设置的“新建(N)”中的N是什么呢?这个可以被称为加速键,就是只有当文件菜单处于激活(显示)状态时,按下N键才会执行新建菜单的功能。

3.在编辑动作对话框中的图标后面的黑色箭头下拉框可以选择使用资源还是使用文件,如果使用文件的话,那么就可以直接在弹出的文件对话框中选择本地磁盘上的一个图标文件。下面我们来讲述使用资源的方式,如果直接点击这个按钮就是默认的使用资源。现在我们先按下编辑动作对话框的确定按钮关闭它。

三、添加资源文件

1.Qt中可以使用资源文件将各种类型的文件添加到最终生成的可执行文件中,这样就可以避免使用外部文件可能出现的一些问题。而且,在编译时Qt还会将资源文件进行压缩,我们可能发现生成的可执行文件比我们添加到其中的资源文件还要小。

2.我们向项目中添加新文件,模板选择Qt资源文件。如下图所示。然后将名称设置为myResources


3.创建完文件后会自动打开该资源文件,这里需要先在下面添加前缀,就是点击添加按钮,然后选择前缀,默认的前缀是“/new/prefix1”,这个可以随意修改(不要出现中文字符),我们这里因为要添加图片,所以修改为/myImages。然后再按下添加按钮来添加文件,这里最好将所有要用到的图片放到项目目录中。比如我们这里在项目目录中新建了一个images文件夹,然后将需要的图标文件粘贴进去。添加完文件后,如下图所示。

4.当添加完资源后,一定要按下Ctrl + S来保存资源文件,不然在后面可能无法显示已经添加的资源。

四、使用资源文件

1.我们重新到设计模式打开新建菜单的编辑动作对话框,然后添加图标。在打开的选择资源对话框中,第一次可能无法显示已经存在的资源,可以按下左上角的绿箭头来更新显示。效果如下图所示。

2.我们点击这里需要的新建图标filenew.png,按下确定即可。现在按下Ctrl + R键运行程序,效果如下图所示。

五、使用代码来添加菜单和图标

1.对于添加的资源文件,在项目目录中可以看到,即myResources.qrc,使用写字板程序将其打开,可以发现它其实就是一个XML文档:
<RCC>
    <qresourceprefix="/myImages">
       <file>images/filenew.png</file>
       <file>images/fileopen.png</file>
       <file>images/filesave.png</file>
       <file>images/filesaveas.png</file>
       <file>images/find.png</file>
    </qresource>
</RCC>

2.前面是在设计模式添加的图标文件,下面我们使用代码再来添加一个菜单,并为其设置图标。在编辑模式打开mainwindow.cpp文件,并在构造函数中添加如下代码:

// 创建新的动作
QAction *openAction = new QAction(tr("&Open"), this);
// 添加图标
QIcon icon(":/myImages/images/fileopen.png");
openAction->setIcon(icon);
// 设置快捷键
openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
// 在文件菜单中设置新的打开动作
ui->menu_F->addAction(openAction);

       这里添加图标时,就是使用的资源文件中的图标。使用资源文件,需要在最开始使用冒号,然后添加前缀,后面是文件的路径。在代码中使用文件菜单,就是使用其objectName。大家现在可以运行程序查看效果,当然这里也可以将Open改为中文。


结语

       这一篇中主要讲解了如何使用资源文件,讲述了在设计模式和代码中两种使用方法。希望大家可以亲自练习一下本篇的内容,在后面的章节中,对于添加菜单和图标等操作将不再进行讲解。




涉及到的源码下载:
图标文件集合:下载



上一篇:第3篇 Qt登录对话框

下一篇:第5篇 Qt布局管理器

返回:系列教程目录  




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 9人气 +15 收起 理由
qq307922494 + 1 很实用!
531873600 + 2 对我帮助很大!
hbbtsk + 2 对我帮助很大!
zhujunwen + 2 很详尽的笔记!
hedongbuyi + 1 小白 膜拜下
丶厉岩c + 2
一代菜鸟 + 2 对我帮助很大!
maduidui + 1 很实用!
^小P孩^ + 2 必须支持!

查看全部评分

回复

使用道具 举报

发表于 2013-4-8 13:04:45 | 显示全部楼层
ui->menu_F中的那个F是第一次创建时的那个快捷键把,为什么编译会出现错误那,把_F去掉就好了

点评

在设计模式下,Menu_F是对应的菜单类的对象名而已  发表于 2013-9-8 22:53
这里的F表示文件的意思。或许你那里有冲突了吧!  发表于 2013-4-9 19:41
回复 支持 反对

使用道具 举报

发表于 2013-4-22 10:22:52 | 显示全部楼层
这篇教程中的下面一行

// 设置快捷键
openAction->setShortcut(QKeySequence(tr("Ctrl+O")));

直接改成 openAction->setShortcut(tr("Ctrl+O"));
就可以了!
回复 支持 反对

使用道具 举报

发表于 2013-5-28 11:40:24 | 显示全部楼层
ui->menu_F   也是出现了错误,提示 错误:'class Ui::MainWindow' has no member named 'menu_F' ;   我在界面模式下,右边对象查看器中的menuBar中找到了menu,把它改成menu_F就好了。可能是这两个地方的命名要对应吧。
回复 支持 反对

使用道具 举报

发表于 2013-6-1 12:41:20 | 显示全部楼层
:-1: 错误:No rule to make target `../MyMeunWF/images/email.png', needed by `debug/qrc_myimages.cpp'.  Stop.
这个是什么意思啊,我之前有这个图片,后来我把它删了,换别的图片,就出现这个错了,不知道是哪里的。
回复 支持 反对

使用道具 举报

发表于 2013-6-1 13:24:54 | 显示全部楼层
caikeyter 发表于 2013-6-1 12:41
:-1: 错误:No rule to make target `../MyMeunWF/images/email.png', needed by `debug/qrc_myimages.cpp'. ...

解决了。MyMeunWF-build-desktop 这个目录删了,重新编译就行了。

点评

这目录在代码目录的上一级目录  发表于 2016-11-23 11:33

评分

参与人数 1人气 +2 收起 理由
xzmoji + 2 对我帮助很大!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-6-22 14:26:54 | 显示全部楼层
遇到一点问题,就是在输入"新建(&N)"的时候,新建两个汉字始终输入不进去,最后还是在Action编辑器中改成汉字的。不知道有没有谁遇到过这种情况?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-23 17:34:57 | 显示全部楼层
tuqiao820 发表于 2013-6-22 14:26
遇到一点问题,就是在输入"新建(&N)"的时候,新建两个汉字始终输入不进去,最后还是在Action编辑器中改成汉 ...

应该不会啊。可以关闭Qt Creator,重新打开运行试试。
回复 支持 反对

使用道具 举报

发表于 2013-6-23 21:56:44 | 显示全部楼层
yafeilinux 发表于 2013-6-23 17:34
应该不会啊。可以关闭Qt Creator,重新打开运行试试。

试过了。不行。我还换了几个输入法,都不行。可能是我用的win8和Qt5的兼容性有一点点问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-23 22:21:44 | 显示全部楼层
tuqiao820 发表于 2013-6-23 21:56
试过了。不行。我还换了几个输入法,都不行。可能是我用的win8和Qt5的兼容性有一点点问题。 ...

用win8啊。嗯,应该是这样了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Qt开源社区——开源 共享 自由

微信扫一扫
查看精品教程!