Qt教程-Qt Creator中定制GUI(添加图标,菜单,工具栏,状态栏)

这里我们使用上一篇的MainWindow工程作为例子。
首先进入UI设计界面,我们新建一个help菜单,然后在help菜单下新建一个about菜单。
如下图所示:

接着我们想为about菜单添加一个工具栏按钮。工具栏按钮一般是以图标的形式存在,想在界面中添加图标,我们需要先新建一个资源文件。选择Qt Creator中的新建按钮,新建一个Qt Resource File 如下图所示:

这里我们新建一个名为res的资源文件。

最后选择项目控制系统,点击完成。

创建完毕资源文件后,在插入图标之前我们需要先添加一个资源前缀。

添加好前缀后我们可以在资源前缀下添加具体的资源了(比如图片资源)。这里直接选择一个前缀然后点击添加文件即可。

这里我们添加了一个/image的前缀,并且向这个前缀里添加了一个icon1.png,最后还给icon1.png这个文件取了个别名叫about。
保存后返回UI设计界面,选择about的Action即可添加图标。

到这里我们已经成功的添加了菜单,并且给about菜单前面加上了一个图标。
最后如果我们想把about菜单放到工具栏上的花,把about的Action拖拽到工具栏上即可。

之后我们可以编译然后运行察看效果。
运行效果如下图所示:

可能有朋友会看到.ui文件实际上是记录界面和控件属性的XML文件,XML很显然是不能经过C++编译器直接编译成二进制文件的,那么我们设计的界面Qt是怎么处理变成程序界面的呢?如果有心看一下编译使用的临时目录那么很容易就能发现答案。前面我们提到了moc这个东西,在这里也是一样,由moc负责把XML文件转换成C++编译器可编译的标准C++代码。
这里我直接贴出moc针对前面的ui文件生产的代码。

当界面创建时会自动调用 setupUi这个函数。我们可以看到函数先创建了一个名为actionabout的QAction对象,顾名思义,QAction这个类代表了窗口的一个“动作”,也就是代表一个要完成的操作,QAction包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息,当QAction被添加到菜单时,就是作为一个菜单的选项出现的,当QAction被添加到工具栏时就是作为一个工具栏的按钮出现。
我们还可以看到生成的代码中对每个对象都执行了setObjectName,同样顾名思义,是为Object对象设置了一个名字。而QStringLiteral则是一个宏,作用是从“字符串常量”创建QString对象,而QString对象我们可以简单的认为和std::string是差不多的,基本上我们可以认为QStringLiteral(“text”)大致上等于std::string(“text”)。
接着创建了一个QIcon对象,通过addFile加载icon。addFile的第一个参数是icon的路径其中以 : 开始,意味着从资源文件中查找资源(资源名可以使用文件名也可以使用别名),最后setIcon给QAction,这样我们的动作就有了图标。设置显示的文字和状态栏的提示是通过retranslateUi的setText来完成的。QApplication::translate函数是用来处理界面国际化问题的,作用是根据设置自动替换文本翻译,这样就可以做到中文环境显示中文,英文环境显示英文了。
我们继续看代码,代码中还创建了QMenuBar,QToolBar,QStatusBar这么几个对象,这几个对象分别是菜单栏,工具栏,状态栏。最后通过对应的set函数显示在界面上。
最后是QMenu,QMenu对象是一级菜单,创建了菜单之后通过addAction添加到菜单栏,之后再把之前创建的QAction添加到一级菜单,由此形成了我们看到的一级一级的菜单。

2 thoughts on “Qt教程-Qt Creator中定制GUI(添加图标,菜单,工具栏,状态栏)”

  1. 请教一下如何给菜单添加快捷键?给菜单下的项目添加快捷键可以直接在 Qt Designer 的 Action Editor 中添加,但是如果给菜单添加呢?比如说我想要按下 F1 就打开 help 菜单这样子的.

发表评论

电子邮件地址不会被公开。 必填项已用*标注