文章目录
- 前言
- 一、什么是信号与槽?
- 二、QObject::connect 函数
- 三、QT 中的字符串类 QString
- 1. 创建和初始化字符串:
- 2. 字符串的拼接和添加
- 3. 字符串的查找和替换
- 4. 字符串的分割和处理
- 总结
前言
QT 中 信号 与 槽机制(Signal and Slot)是QT GUI 编程中的一项非常强大的功能。简单来说,它是一种事件处理机制,可以实现类与类之间的通信,并且可以解耦合应用程序。本文将对QT中信号与槽的详细使用方法做出介绍。
一、什么是信号与槽?
-
信号:(Signal)由操作系统产生的消息。指对象发生了某种事件,如点击按钮、文本框内容改变等。Qt中的控件和对象都定义了与之对应的信号。
槽:(slot) 程序中的消息处理函数。槽函数可以对信号事件做出响应,如更新界面、修改对象的属性等。
连接:(connect) 将系统消息绑定到消息处理函数,以使信号事件的发生可以触发槽函数的执行。
信号 到 槽 的连接必须发生在两个 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 );
- 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中信号与槽机制的基础知识及用法。
通过信号与槽机制的使用,我们可以使得代码变得更加清晰、易于维护,并且能够轻松地处理对象与对象之间的通信。
在使用过程中一定要注意对象的生命周期和连接关系,否则有可能会引起内存泄漏和程序崩溃等问题。