QT开发中文网

Qt中,普通类 使用connect 需要什么前置条件

在 Qt 中,普通类使用 connect 需要满足以下前置条件:

  1. 普通类必须继承自 QObject 或其子类,以便能够使用信号和槽机制。
  2. 必须将该普通类实例化为 QObject 的子类对象,并通过 registerObject() 注册到 Qt 元对象系统中。
  3. 连接信号和槽时,需要指定发送信号的对象和接收槽的对象。如果发送信号的是一个单独的普通类,则需要先将其封装为一个 QObject 的子类对象。

例如,有如下示例代码:

class MyObject : public QObject {
    Q_OBJECT
public:
    MyObject(QObject *parent = nullptr) : QObject(parent) {}

signals:
    void mySignal(int value);
};

class MyNormalClass {
public:
    void mySlot(int value) {
        qDebug() << "Received signal: " << value;
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MyObject obj;
    MyNormalClass normalObj;

    // 将普通类包装成 QObject 的子类对象
    auto wrapper = new QObject(&obj);
    wrapper->setObjectName("MyNormalClassWrapper");
    
    // 注册到元对象系统中
    qRegisterMetaType<MyNormalClass*>("MyNormalClass*");
    
    // 连接信号和槽
    bool ok = false;
    ok = QObject::connect(&obj, &MyObject::mySignal,
                          wrapper, [=, &normalObj]() { normalObj.mySlot(value); });
                          
   if (ok) {
        qDebug() << "Connect successful!";
   } else {
        qDebug() << "Connect failed!";
   }

    return app.exec();
}

在这个例子中,MyNormalClass 是一个普通类,它的对象 normalObj 通过 QObject 的子类对象 wrapper 进行了封装,并注册到元对象系统中。然后使用 connect 函数连接 MyObject 的信号和 MyNormalClass 的槽函数。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1783

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?