文章目录
- 概述
- 小结
概述
在Qt中,slots 是一种特殊的成员函数,它们可以与对象发出的信号连接。当信号被触发时,连接的槽函数会被调用。
来个简单的示例吧,如下图:
#include <QObject>
#include <QDebug>class MyClass : public QObject {Q_OBJECTpublic: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_OBJECTpublic: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,下篇写点有用的,好玩的内容。