“QT 快速上手指南“ 之 计算器(三)信号与槽,connect 函数,QString

简介: QT 中 信号 与 槽机制(Signal and Slot)是QT GUI 编程中的一项非常强大的功能。简单来说,它是一种事件处理机制,可以实现类与类之间的通信,并且可以解耦合应用程序。本文将对QT中信号与槽的详细使用方法做出介绍。

前言


QT 中 信号 与 槽机制(Signal and Slot)是QT GUI 编程中的一项非常强大的功能。简单来说,它是一种事件处理机制,可以实现类与类之间的通信,并且可以解耦合应用程序。本文将对QT中信号与槽的详细使用方法做出介绍。


一、什么是信号与槽?


信号:(Signal)由操作系统产生的消息。指对象发生了某种事件,如点击按钮、文本框内容改变等。Qt中的控件和对象都定义了与之对应的信号。


槽:(slot) 程序中的消息处理函数。槽函数可以对信号事件做出响应,如更新界面、修改对象的属性等。


连接:(connect) 将系统消息绑定到消息处理函数,以使信号事件的发生可以触发槽函数的执行。

15c569afd831603c63324f0b7a443e1.png


信号 到 槽 的连接必须发生在两个 QT 类对象之间。


2.QT 中的关键字:


①SIGNAL : 用于 指定 消息名。

② SLOT : 用于 指定 消息处理函数。

③ Q_OBJECT : 所有 自定义的槽类 必须在类声明的开始处加上 Q_OBJECT 。

④ slots : 用于在类中 声明消息处理函数。


二、QObject::connect 函数


在 Qt 中,我们通常使用 connect( ) 函数来建立信号与槽之间的连接.


当 sender 的 信号 发生时, signal 就会映射到 receiver 的 method成员函数上。


bool QObject::connect ( const QObject * sender, 
      const char * signal, 
      const QObject * receiver, 
      const char * method,
       Qt::ConnectionType type = Qt::AutoConnection );
1
2


sender : 指定了信号的发送者

signal : 信号函数的指针, 消息名

receiver : 信号的接收者

method : 接收者的槽函数指针,接收对象的成员函数

ps :

在 QT 中,消息用字符串 进行描述。

connect 函数在消息名和处理函数之间 建立 映射。


示例代码:

class Widget : public QWidget
{
   Q_OBJECT  //声明(由于自定义槽函数)
private:
    QPushButton FontDialogBtn;
private slots:
    void FontDialogBtn_click();  // 消息处理函数
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};


连接函数:


connect(&FontDialogBtn, SIGNAL(clicked()),this, SLOT(FontDialogBtn_click()));  
1

三、QT 中的字符串类 QString


在 Qt 中,QString 是 Qt 提供的一个字符串处理类,它的成员函数覆盖了许多方面的字符串处理,包括文本处理、查找、替换、分割和格式化等。

95b50c471dbf5250c3488093fc144ae.png



1. 创建和初始化字符串:

/* 创建了两个具有相同值的QString变量。 */
QString str1 = "Hello World";  // 常量字符串
QString str2("Hello World");   // 构造函数

1

2

3

4

2. 字符串的拼接和添加

在Qt中,我们可以使用以下方法将两个字符串连接在一起:


QString str1 = "Hello";
QString str2 = "World";
QString result = str1 + " " + str2;
1

2

3

在上面的例子中,我们使用了+运算符以将两个字符串连接在一起,并将结果存储在新的QString中。


除此之外,我们还可以在字符串的末尾添加新的字符或子串。为此,QString提供了append( ) 、operator+=( ) 和 push_back( ) 成员函数。


3. 字符串的查找和替换

在Qt中,我们可以使用以下函数查找和替换字符串:

QString str = "This is a test string";
int index = str.indexOf("test");  // 查找test在字符串中第一次出现的位置
int lastIndex = str.lastIndexOf("test");  // 查找test在字符串中最后一次出现的位置
QString newStr = str.replace("test", "example"); // 将test替换为example
1

2

3

4

5

在上面的例子中,我们定义了一个字符串,然后使用indexOf()和lastIndexOf()函数查找test在字符串中第一次和最后一次出现的位置。最后,我们使用replace()函数将test替换为example。


4. 字符串的分割和处理

在Qt中,我们可以使用以下函数对字符串进行分割和处理:

QString str = "Name: John\nAge: 30";
QStringList list = str.split("\n");  // 按行分割,返回QStringList类型
QString name = list[0].split(": ")[1];  // 获取姓名
int age = list[1].split(": ")[1].toInt();  // 获取年龄并转换为int类型
1

2

3

4

5

在上面的例子中,我们使用了split()函数来将字符串按行分割,并返回QStringList类型。然后我们使用split()函数返回的结果就是一个QStringList类型的列表,我们可以通过索引将列表中的元素获取出来。接下来,我们可以使用split()函数进一步将每行按":"进行分割,并获取每个字段的值。


还可以使用其他的QString函数进行一些其他的字符串操作,如 trimmed( ) 函数可以去除字符串首尾的空格,toUpper()函数可以将字符串转为大写字母等。


总结

在本文中,我们简要介绍了Qt中信号与槽机制的基础知识及用法。


通过信号与槽机制的使用,我们可以使得代码变得更加清晰、易于维护,并且能够轻松地处理对象与对象之间的通信。


在使用过程中一定要注意对象的生命周期和连接关系,否则有可能会引起内存泄漏和程序崩溃等问题。

————————————————


相关文章
|
4天前
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
【Qt 学习笔记】按钮实现helloworld | 信号与槽概述
31 0
|
4天前
QT中HASH函数方法
QT中HASH函数方法
129 0
|
4天前
|
C++
基于Qt的简易计算器设计与实现
基于Qt的简易计算器设计与实现
71 0
|
4天前
|
存储 安全 编译器
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
【Qt 底层机制之信号和槽 】深入探究Qt信号和槽背后的原理
156 4
|
4天前
|
安全 编译器 开发者
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式
39 0
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
Qt 窗口常用位置API函数 & 绘图原理 & 双缓冲机制 总结
|
4天前
|
C语言 容器
【qt】QString字符串2
【qt】QString字符串2
9 0
|
4天前
|
C++
【qt】QString字符串1
【qt】QString字符串1
14 0
|
4天前
|
图形学 C++ 容器
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
QT信号与槽机制 和 常用控件介绍
|
4天前
|
编译器 API
【Qt】- 信号和槽函数
【Qt】- 信号和槽函数

推荐镜像

更多