在 Qt 中,自定义信号和槽可以通过以下步骤实现:

  1. 在类定义中声明信号和槽函数,例如:
class MyClass : public QObject
{
    Q_OBJECT
public:
    MyClass(QObject *parent = nullptr);

signals:
    void mySignal(int value);

public slots:
    void mySlot(int value);
};
  1. 在实现文件中实现信号和槽函数,例如:
MyClass::MyClass(QObject *parent)
    : QObject(parent)
{
}

void MyClass::mySlot(int value)
{
    qDebug() << 'mySlot triggered with value: ' << value;
    emit mySignal(value * 2);
}
  1. 在需要使用信号和槽的地方连接它们,例如:
MyClass *obj = new MyClass(this);
connect(obj, &MyClass::mySignal, [this](int value) {
    qDebug() << 'mySignal triggered with value: ' << value;
});
connect(this, &SomeClass::someSignal, obj, &MyClass::mySlot);

在第一个 connect 中,我们将 MyClass 的 mySignal 信号连接到一个 lambda 表达式,当 mySignal 触发时,lambda 表达式会被调用。

在第二个 connect 中,我们将 SomeClass 的 someSignal 信号连接到 MyClass 的 mySlot 槽函数,当 someSignal 触发时,mySlot 会被调用。

需要注意的是,在类定义中声明信号和槽函数时,需要在类定义的开头添加 Q_OBJECT 宏,以启用元对象系统的支持。

Qt 自定义信号与槽:详细教程及示例

原文地址: https://www.cveoy.top/t/topic/mYU6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录