概述
在Qt中,slots 是一种特殊的成员函数,它们可以与对象发出的信号连接。当信号被触发时,连接的槽函数会被调用。
来个简单的示例吧,如下图:
#include <QObject>
#include <QDebug>
class MyClass : public QObject {
Q_OBJECT
public:
MyClass() {
// 连接信号和槽
connect(this, &MyClass::someSignal, this, &MyClass::someSlot);
}
signals:
void someSignal(); // 声明一个无参数的信号
public slots:
void someSlot() { // 声明一个无参数的槽函数
qDebug() << "someSlot called!";
}
void anotherSlot(int value) { // 声明一个有参数的槽函数
qDebug() << "anotherSlot called with value:" << value;
}
};
int main() {
MyClass obj;
obj.emit someSignal(); // 发出信号
obj.anotherSlot(42); // 直接调用槽函数
return 0;
}
如果对C++熟悉,可以直接把connect函数改成其他格式,如下是lamda表达式:
#include <QObject>
#include <QDebug>
class MyClass : public QObject {
Q_OBJECT
public:
MyClass() {
// 连接信号和槽
connect(this, &MyClass::someSignal, this, [this](){
qDebug() << "someSlot Called!"; //1将调用写到lamda中
//emit anotherSlot(42); // 2也可以调用另外一个slot函数
});
}
signals:
void someSignal(); // 声明一个无参数的信号
public slots:
// void someSlot() { // 声明一个无参数的槽函数
// qDebug() << "someSlot called!";
// }
void anotherSlot(int value) { // 声明一个有参数的槽函数
qDebug() << "anotherSlot called with value:" << value;
}
};
int main() {
MyClass obj;
obj.emit someSignal(); // 发出信号
obj.anotherSlot(42); // 直接调用槽函数
return 0;
}
小结
这篇主要写了qt slots函数,不熟悉qt经常忘记这个,其余的内容对c++程序来说就容易驾驭多了。OK,下篇写点有用的,好玩的内容。