“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中信号与槽机制的基础知识及用法。


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


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

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


相关文章
|
2月前
|
编译器
(9)Qt中信号与槽重载的解决方案
本文介绍了在Qt中处理信号与槽重载问题的三种解决方案:使用函数指针、Qt提供的QOverload类和Qt4的宏方式。
164 3
|
2月前
(8)Qt中的自定义信号
本文介绍了如何在Qt框架中创建和使用自定义信号,并通过一个父子窗口切换的示例来展示自定义信号的实现和应用。
104 3
|
7天前
|
传感器 安全
第四问:QT中信号和槽原理
Qt的信号与槽机制是观察者模式的典型实现,允许对象间通信而不直接依赖。信号用于通知事件发生,槽是响应信号的函数,通过`QObject::connect()`连接。这种机制实现了松耦合、灵活扩展和自动通知,适用于UI更新和数据绑定等场景。
26 1
|
1月前
|
C++
003 Qt_信号和槽-上
本文介绍了Qt中的信号与槽机制,包括信号和槽的概念、本质及连接方法,并演示了如何自定义槽函数。信号是事件的体现,槽是对信号的响应函数。通过信号与槽,可以将独立的控件关联起来,实现复杂的交互逻辑。文中还详细展示了如何在Qt项目中定义和使用槽函数,通过实例代码和图形化界面操作,帮助读者更好地理解和应用这一机制。
56 1
003 Qt_信号和槽-上
|
5月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
165 4
|
2月前
(7)Qt中的自定义槽(函数)
这篇文章介绍了在Qt中如何定义和使用自定义槽函数,包括类成员函数、静态类成员函数、全局函数和lambda表达式作为槽函数的示例,以及使用lambda表达式时的注意事项。
71 2
|
4月前
|
程序员 C++
【Qt】信号与槽(下)
【Qt】信号与槽(下)
|
4月前
|
Linux C++
【Qt】信号与槽(上)
【Qt】信号与槽(上)
【Qt】信号与槽(上)
|
4月前
【qt】有点意思的信号与槽
【qt】有点意思的信号与槽
24 0
|
4月前
【qt】QTcpSocket相关的信号
【qt】QTcpSocket相关的信号
29 0