QT开发中文网

class baseMsg { Q_OBJECT public: void bwEmitSignal(msgObj *msg) { emit action(msg); } signals: void action(msgObj *msg); }; class mainLogicThread; class baseWidget : public QWidget, public baseMsg { Q_OBJECT public: ...

根据你提供的源代码,我可以看到在baseWidget类的构造函数中,使用QObject::connect()函数连接了一个信号和槽。具体来说,在这里将baseMsg类的action信号与lambda表达式绑定,并将其连接到了线程对象thread的mltMsgProc槽。

根据报错信息,发现是由于QObject::connect()函数中第5个参数(即槽函数)的类型不匹配导致的问题。原因在于lambda表达式作为第5个参数时,无法被正确解析为一个符合条件的槽函数。

为了解决这个问题,建议你将lambda表达式替换为一个普通的成员函数或者静态成员函数,并确保该函数参数和返回值类型与信号相匹配。例如:

class baseWidget : public QWidget, public baseMsg
{
    Q_OBJECT
public:
    explicit baseWidget(QWidget *parent = nullptr, QThread *thread = NULL);

private slots:
    void onAction(msgObj *msg);
};

void baseWidget::onAction(msgObj *msg) {
    QMetaObject::invokeMethod(thread(), "mltMsgProc", Qt::QueuedConnection, Q_ARG(msgObj *, msg));
}

baseWidget::baseWidget(QWidget *parent, QThread *thread) : QWidget(parent)
{
    connect(this, &baseMsg::action, this, &baseWidget::onAction);
}

注意,在这里使用了this指针作为第3个参数来指定槽所属的对象。此外,在onAction()函数中调用了QThread::currentThread()函数来获取当前线程对象。你可以根据实际情况来修改这部分代码。

希望这些信息能够对你有所帮助!

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?