这次的笔记记录的是在学习Qt6 C++前两章时,一些比较重要的知识点梳理。
主要是有两部分: 组件的图标设置和 信号与槽
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/77ff0c3199f540878c95df96f063f824.png)
这个小项目需要实现以下功能:
- 可以有一个能够输入文本内容的文本框
- 通过不同按键设置文本框中字体的样式
组件图标的设置
建立相关组件
要完成对组件图标的设置首先需要建立相关的组件
这个项目选择使用的是dialog项目框架,使用默认的开发套件MinGW 64-bit,构建项目的工具选择的是qmake。项目创建完成以后到ui项目文件中添加对应的组件。
- 实现字体样式修改使用的是 Check Box 组件
- 实现字体颜色修改使用的是 Radio Box 组件
- 使用一个纯文本编辑框组件(Plain Text Edit)用来输入文本内容
- 下面三个按钮使用的是 Push Button 组件
创建一个水平布局块,将每一种不同类型的按钮组件放在对应的水平布局块中,使得显示效果更为可观。
相关组件的图标设置
首先需要将要用到的图标图片存储到项目的根目录中。接着按照下面的步骤将图标导入项目。
新建资源文件,资源文件的主要功能是用来存储图标和图片文件,以便在程序里使用。
完成新建以后能够看到在项目文件中的资源文件夹中有了刚才创建的资源文件。
在资源文件里需要现建立一个前缀,前缀用来表示资源的分组,点击添加前缀就可以创建一个前缀,接着就可以进行添加文件,把前面存放在项目根目录下的图片进行添加。
添加成功以后,去到ui设计文件中,找到对应组件的图标属性进行修改。
点击选择资源以后就会跳出小窗口,里面显示着我们刚才添加的图标文件,进行选择后,为该组件的图标属性进性修改。
这里需要注意一下!!!只有通过资源的方式设置图标,项目运行时对应的组件上才能够显示出所设置的图标。
选择完成以后就可以看到ui界面上对应的组件有的新的图标。
对于其他组件的图标设置都是使用相同的方法进行实现的。
为应用程序设置图标
项目完成构建后生成的可执行文件有默认的图标,想要为应用程序设置图标需要完成以下几步。
①将要设置的图标文件复制到项目根目录下,图标文件的后缀需要改为.ico
,假设图标文件名是Start.ico。
②在项目配置文件(.pro文件)中使用RC_ICONS设置图标文件,通过添加下面这一行语句实现
RC_ICONS = Start.ico
在选择构建项目的工具软件时选择使用qmake,使用该工具软件项目生成的配置文件才是.pro文件,这样才能通过上述方式进行设置应用程序图标。
设置图标的方式就是通过以上内容实现的,相比对于各位来讲也没有多大难度。通过多次的使用积累自然就非常熟练了。
信号与槽
信号与槽的介绍
信号与槽是Qt编程的基础!有了该编程机制使得Qt项目中各个组件的交互操作变得更加直观简单。
信号(signal)
是指在特定情况下被发射的通知。例如PushButton组件中经常使用的信号就是鼠标点击该组件时发射的clicked()信号。槽(slot)
是对信号进行响应的函数
。槽就是函数,与一般的C++函数一样,可以具有任何参数,也可以被直接调用,与御坂函数不同的是:槽函数可以与信号关联,当信号被发射时,与信号相关联的槽函数被自动执行。信号与槽的关联
信号与槽之间是通过函数QObject::connect实现关联的。
connect()函数的介绍
connect()函数是用来实现信号与槽的关联的,使用connect()
函数的基本格式如下:
connect(sender,SIGNAL(signal()),receiver,SLOT(slot());
sender
是发送信号的对象名称signal()
是信号receiver
是接收信号的对象的名称slot()
是槽函数
SIGNAL和SLOT是Qt的宏,用于指明信号和槽函数。
关于信号与槽的使用有以下规则:
①在使用信号与槽的类中需要在类的定义中插入宏Q_OBJECT。
②一个信号可以连接多个槽。
③多个信号可以连接同一个槽函数。
④一个信号可以连接另一个信号。
信号与槽的使用
在定义和使用信号与槽函数前,需要先对相关组件对象进行命名,这样做是为了在后续的函数定义时,并且使用自动生成的槽函数时,对应的槽函数名称里也有对象名称能够一目了然每一个槽函数所对应的实现目的。
窗口上的组件的实例名称是每一个组件对象的名称,界面上的每一个组件需要有唯一的对象名称,在程序中访问界面组件都是通过对应组件的对象名称进行的。
将所需要用到的组件对象名称进行一一修改之后就可以开始定义与组件相关联的槽函数了。
使用自动生成的槽函数
当我们要对某一组件进行定义槽函数时,可以选择自动生成的方式。
首先选择到对应的组件,右键,在菜单栏中点击转到槽…
点击之后就会显示出一个对话框,选择所要自动生成的槽函数。
选择之后就会在项目中自动生成对应的槽函数,自动生成的槽函数不需要手动去到类中声明对应的槽函数对象,也不需要手动定义和实现信号与槽对应的connect()关联函数,QtCreator中会自动声明。
选择之后只需要去到源文件中,完成对应槽函数的定义,就可以实现相关的功能。
例如
我们对按钮组件的信号使用自动生成的槽函数,对于按钮组件一般发射的是clicked()信号,我们只需要在这个按钮被点击之后就发射该信号。
在源文件中就会得到一个这样的函数,通过定义函数中的内容,实现点击该按钮后就清空文本编辑框中的内容。
再例如
对于一个复选框组件,当复选框被勾选时发射clicked()和clicked(bool)和根据对应组件的目的选择不同的信号发射方式。我们需要根据该复选框的选择状态来进行相应的操作(将字体加粗、斜体等),所以需要使用信号clicked(bool)。
通过定义自动生成的槽函数实现字体的修改。
使用自定义的槽函数
使用自定义的槽函数实现通过单选按钮的状态修改纯文本编辑框中字体的颜色。
首先需要到类的私有槽中(private slots)声明自定义的槽函数,完成声明以后,点击函数名,右键选择重构(Refactor),然后将该槽函数的定义添加到源文件中,这样就可以在源文件中自动生成该槽函数的代码框架。
完成对槽函数的定义,对应的组件发射信号就执行槽函数中定义的指令。
完成了槽函数的定义以后还需要使用connect()函数将信号与槽进行关联。
对于自定义的槽函数,他不会自动与该函数中使用到的组件相关信号进行关联所以需要在对应类的构造函数中完成定义
。手动将组件发射的信号与对应的槽函数实现关联。
文章上面已经对connect()关联函数进行介绍过了,这里就直接说明一下使用connect()函数如何手动实现信号与槽的关联。
回顾connect()
函数的基本格式如下:
connect(sender,SIGNAL(signal()),receiver,SLOT(slot());
首先我们明确发射信号的对象(哪一个组件)是什么?该对象发射的是什么信号?接收信号的对象是什么?该信号触发后要执行的槽函数是什么?
明确之后对于connect()函数的声明就非常容易了!
完成槽函数的定义,并且将组件的信号与槽函数实现关联之后,程序运行时当组件发射信号,就执行对应槽函数中的内容,实现项目功能,该项目就能够成功展示了!
回顾
本文介绍了Qt项目中对应组件的设置方法、信号与槽的使用方式。通过阅读本文能够掌握相关的基本知识点。想要学习更多的内容可以结合阅读Qt6C++书籍。