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


前言

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

一、什么是信号与槽?

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

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

    连接:(connect) 将系统消息绑定到消息处理函数,以使信号事件的发生可以触发槽函数的执行。
    在这里插入图片描述

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

2.QT 中的关键字:

SIGNAL : 用于 指定 消息名。
SLOT : 用于 指定 消息处理函数
Q_OBJECT : 所有 自定义的槽类 必须在类声明的开始处加上 Q_OBJECT
slots : 用于在类中 声明消息处理函数。


二、QObject::connect 函数

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

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

bool QObject::connect ( const QObject * sender, 
						const char * signal, 
						const QObject * receiver, 
						const char * method,
						 Qt::ConnectionType type = Qt::AutoConnection );
  • 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()));  

三、QT 中的字符串类 QString

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

在这里插入图片描述

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

/* 创建了两个具有相同值的QString变量。 */
QString str1 = "Hello World";  // 常量字符串

QString str2("Hello World");   // 构造函数

2. 字符串的拼接和添加

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

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

在上面的例子中,我们使用了+运算符以将两个字符串连接在一起,并将结果存储在新的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

在上面的例子中,我们定义了一个字符串,然后使用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类型

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

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


总结

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

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

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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果罐子♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值