Qt入门学习之主窗体类QMainWindow

1. 主窗体类QMainWindow简介

QMainWindow是 Qt 框架带来的一个预定义好的主窗口类。所谓主窗口,就是一个普通意义上的应用程序(不是指游戏之类的那种)最顶层的窗口。比如你现在正在使用的浏览器,那么主窗口就是这个浏览器窗口。QMainWindow的布局是由一个标题栏,一个菜单栏,若干工具栏和一个任务栏。在这些子组件之间则是工作区。

2. 依托主窗体类创建项目,并在主窗体中进行菜单创建、工具栏创建、状态栏创建、动作添加及资源文件使用

I、创建项目demo6
创建一个Qt Widget Application项目demo6,实现更改文本编辑框文字颜色功能.在创建窗体时选择基类QMainWindow,生成的类命名为MainWindow,并选择生成窗体。这样生成的项目文件中就会自动生成mainwindow.ui文件、一个头mainwindow.h和一个源程序文件mainwindow.cpp,项目文件demo.pro和主程序文件main.cpp。项目运行结果如下:
在这里插入图片描述
这个窗口,虽然不太明显,但它实际上分成了几个部分:
在这里插入图片描述
主窗口的最上面是 Window Title,也就是标题栏,通常用于显示标题和控制按钮,比如最大化、最小化和关闭等。通常,各个图形界面框架都会使用操作系统本地代码来生成一个窗口。所以,你会看到在 KDE 上面,主窗口的标题栏是 KDE 样式的;在 Windows 平台上,标题栏是 Windows 风格的。如果你不喜欢本地样式,比如 QQ 这种,它其实是自己将标题栏绘制出来,这种技术称为 DirectUI,也就是无句柄绘制。
Window Title 下面是 Menu Bar,也就是菜单栏,用于显示菜单。
窗口最底部是 Status Bar,称为状态栏。当我们鼠标滑过某些组件时,可以在状态栏显示某些信息,比如浏览器中,鼠标滑过带有链接的文字,你会在底部看到链接的实际 URL。
除去上面说的三个横向的栏,中间是以矩形区域表示。我们可以看出,最外层称为 Tool Bar Area,用于显示工具条区域。之所以是矩形表示,是因为,Qt 的主窗口支持多个工具条。你可以将工具条拖放到不同的位置,因此这里说是 Area。

II、主窗体菜单栏、工具栏、状态栏、动作添加及资源文件使用
在主窗口基础之上,添加菜单和工具栏等的动作。虽然 Qt Creator 已经帮我们实现了主窗口的框架代码,但是具体的功能,还是需要我们一行行添加。

II_I、Qt中资源文件的使用
在Qt开发过程中一般都会用到Qt资源系统,Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等),那么,将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说,如果你将资源以资源文件形式存储,它是会编译到可执行文件内部。
1)使用 Qt Creator 可以很方便地创建资源文件。我们可以在工程上点右键,选择“添加新文件…”,可以在 Qt 分类下找到“Qt 资源文件”:
在这里插入图片描述
2)点击“选择…”按钮,打开“新建 Qt 资源文件”对话框。在这里我们输入资源文件的名字和路径:
在这里插入图片描述
3)点击下一步,选择所需要的版本控制系统,然后直接选择完成。我们可以在 Qt Creator 的左侧文件列表中看到“资源文件”一项,也就是我们新创建的资源文件,然后在右侧的编辑区有个“添加”,我们首先需要添加前缀,前缀名称任意取比如我们将前缀取名为 images。然后选中这个前缀,继续点击添加文件,可以找到我们所需添加的文件(如png格式的图片)。再打开即可完成资源文件的添加,如图所示:
在这里插入图片描述
II_II、Qt项目主窗体的菜单栏、工具栏添加动作并使用资源文件中的图片
Qt 使用QAction类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。因此,Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。QAction包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。当把一个QAction对象添加到程序中时,Qt 自己选择使用哪个属性来显示,无需我们关心。同时,Qt 能够保证把QAction对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说,如果我们在菜单中修改了QAction的图标,那么在工具栏上面这个QAction所对应的按钮的图标也会同步修改。

1)纯代码在菜单栏和工具栏添加动作并使用资源文件
在这里插入图片描述
2)使用可视化设计器创建菜单栏,工具栏、动作以及使用资源文件
在这里插入图片描述
编号1:双击Type Here,进入编辑状态写入要创建的菜单项名,如"文件"。最后“enter”确认并退出菜单项的编辑状态。
编号2:单击创建好的菜单项会弹出如编号2所在的下拉列表,同样如创建菜单项操作,创建菜单项下的子菜单(动作),这个过程即是添加动作。
编号3:添加好动作后,在动作编辑窗口中显示已添加的动作的相关属性,如名称、功能、快捷方式等等。
编辑动作,只需要双击编号3所在窗口中的对应动作即可进入动作的编辑窗口。
在这里插入图片描述
在这个动作编辑窗口中可以设置动作的对象名称,快捷键以及使用资源文件作为改动作的动作图标等等。
使用资源文件作为动作图标的具体做法是,点击红色箭头所在位置,选择相关的资源文件下的图标,再单击OK,即完成该操作。
在这里插入图片描述
添加动作到工具栏,只需要在设计状态下,直接使用鼠标拖动先前添加好的动作到工具栏即可。编辑状态和项目运行结果如图:(箭头指向工具栏)
在这里插入图片描述
注1:Action 是一种不可见的界面元素,主要用于菜单项、工具栏按钮的设计。Action的主要信号是trigger(),作为有一个Actio的trigger()信号编写槽函数之后,菜单栏和工具栏上由此Action创建的菜单项和工具栏按钮就都关联此槽函数。Action信号与槽的关联及槽函数框架的实现与一般组件的操作类似。

注2:使用menuBar()函数,Qt 为我们创建了一个菜单栏。menuBar()是QMainWindow提供的函数,因此你是不会在QWidget或者QDialog中找到它的。这个函数会返回窗口的菜单栏,如果没有菜单栏则会新创建一个。这也就解释了,为什么我们可以直接使用menuBar()函数的返回值,毕竟我们并没有创建一个菜单栏对象啊!原来,这就是menuBar()为我们创建好并且返回了的。

Qt 中,表示菜单的类是QMenuBar。QMenuBar代表的是窗口最上方的一条菜单栏。我们使用其addMenu()函数为其添加菜单。尽管我们只是提供了一个字符串作为参数,但是 Qt 为将其作为新创建的菜单的文本显示出来。至于 & 符号,我们已经解释过,这可以为菜单创建一个快捷键。当我们创建出来了菜单对象时,就可以把QAction添加到这个菜单上面,也就是addAction()函数的作用。

QToolBar部分非常类似。顾名思义,QToolBar就是工具栏。我们使用的是addToolBar()函数添加新的工具栏。为什么前面一个是menuBar()而现在的是addToolBar()呢?因为一个窗口只有一个菜单栏,但是却可能有多个工具栏。工具栏可以设置成固定的、浮动的等等。

添加了一个孤零零的statuBar()显得不伦不类,但是,同前面的menuBar()的实现类似,这个函数会返回一个QStatusBar对象,如果没有则先创建再返回。QStatusBar继承了QWidget,因此,我们可以将其它任意QWidget子类添加到状态栏,从而实现类似 Photoshop 窗口底部那种有比例显示、有网格开关的复杂状态栏。

3.为应用程序设置图标

在.pro文件中使用RC_ICONS设置图标文件名(xx.ico),操作与运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cainiaoxiakexing/article/details/88687545
今日推荐