文档章节

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

小代码2016
 小代码2016
发布于 2015/05/27 15:27
字数 1059
阅读 18
收藏 0
前面一节我们已经把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,在构造函数中修改代码:
 
openAction = new QAction(tr( "&Open"), this);
openAction->setShortcut(QKeySequence::Open);
openAction->setStatusTip(tr( "Open a file."));
openAction->setIcon(QIcon( ":/Open.png")); // Add code.
 
我们使用setIcon添加图标。添加的类是QIcon,构造函数需要一个参数,是一个字符串。由于我们要使用qrc中定义的图片,所以字符串 以 : 开始,后面跟着prefix,因为我们先前定义的prefix是/,所以就需要一个/,然后后面是file的路径。这是在前面的qrc中定义的,打开 qrc看看那张图片的路径即可。
 
好了,图片添加完成,然后点击运行,看看效果吧!
 
 
瞧!我们只需要修改QAction,菜单和工具条就已经为我们做好了相应的处理,还是很方便的!
 
下一步,为QAction添加事件响应。还记得Qt的事件响应机制是基于信号槽吗?点击QAction会发出triggered()信号,所以,我们要做的是声名一个slot,然后connect这个信号。
 
mainwindow.h
 
class MainWindow : public QMainWindow
{
        Q_OBJECT

public:
        MainWindow(QWidget *parent = 0);
        ~MainWindow();

private slots:
         void open();        

private:
        QAction *openAction;
};
 
因为我们的open()目前只要在类的内部使用,因此定义成private slots即可。然后修改cpp文件:
 
MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
{
        openAction = new QAction(tr( "&Open"), this);
        openAction->setShortcut(QKeySequence::Open);
        openAction->setStatusTip(tr( "Open a file."));
        openAction->setIcon(QIcon( ":/Open.png"));
        connect(openAction, SIGNAL(triggered()), this, SLOT(open()));

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

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

void MainWindow::open()
{
        QMessageBox::information(NULL, tr( "Open"), tr( "Open a file"));
}
 
注意,我们在open()函数中简单的弹出一个标准对话框,并没有其他的操作。编译后运行,看看效果:
 
 
好了,关于QAction的动作也已经添加完毕了!
 
至此,QAction有关的问题先告一段落。最后说一下,如果你还不知道怎么添加子菜单的话,看一下QMenu的API,里面会有一个addMenu函数。也就是说,创建一个QMenu然后添加就可以的啦!

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/205958

本文转载自:http://devbean.blog.51cto.com/448512/205958

小代码2016
粉丝 45
博文 328
码字总数 153495
作品 0
安阳
程序员
私信 提问
Qt creator写Qt入门程序(超详细)

废话一下。第一、Qt是跨平台的,在windows下和Linux基本上是没什么区别的,只要用的是Qt带的库就可以。 第二、Qt c++编程和学校学的c++还有有一点区别的,学校学的c++是基础知识,Qt c++编程...

startstorm
2015/09/05
417
0
qwidget qmainwindow qdialog 简要区别

原文网址: http://zxwmail.blog.163.com/blog/static/120947384201010611017114/ QWidget类是所有用户界面对象的基类。 窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事...

racoon
2011/05/15
212
0
关于Qt5里的两个问题

第一个问题是 Qt学习之路47 里的booleanmodel.cpp文件 基类是QAbstractItemModel 有人说Qt5没有reset()函数,不知道有什么代替的。 第二个问题是 Qt学习之路48 里代码全部模仿的一样 错误: ...

李新浩
2014/03/06
245
0
收藏的博客 -- Qt/C++学习

Qt下载官网 http://download.qt.io/ Qt知名社区 http://www.qtcn.org/bbs/i.php http://www.qter.org/ Qt知名博客 https://www.devbean.net/ --- Qt学习之路,Qt Creator源码学习 http://blo......

libaineu2004
2017/08/18
0
0
WordPress 动态添加菜单到顶部管理工具条

倡萌之前分享过《25+自定义WordPress顶部管理工具条的技巧》,今天补充下,如何将 外观-菜单 设置的菜单项目添加到顶部工具条,然后你可以直接在 外观-菜单 管理这个菜单的链接,效果如下如:...

james_laughing
2018/08/20
13
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
7
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部