QT开发中文网

QT 子线程向主线程发信号,并弹出窗口

在Qt中,子线程无法直接与主线程进行通信。但是你可以通过信号和槽机制实现子线程向主线程发送信号,并由主线程弹出窗口。

首先,在主线程中定义一个自定义的信号,用于接收子线程发来的信号:

class MainWindow : public QMainWindow
{
    Q_OBJECT

signals:
    void showWindowSignal();

public slots:
    void showWindow()
    {
        QMessageBox::information(this, "Message", "Signal received from subthread");
    }
};

然后,在子线程类中发射这个信号:

class SubThread : public QThread
{
    Q_OBJECT

public:
    void run() override
    {
        // 子线程的处理逻辑

        emit showWindowSignal();
    }

signals:
    void showWindowSignal();
};

最后,在主函数或其他地方创建并启动子线程以及连接信号和槽:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    MainWindow mainWindow;
    
    SubThread subThread;
    
    QObject::connect(&subThread, &SubThread::showWindowSignal, &mainWindow, &MainWindow::showWindow);

    subThread.start();

    return a.exec();
}

当子线程运行时,它会发射showWindowSignal()信号。然后该信号将被连接到主窗口对象的showWindow()槽函数上,该槽函数会弹出一个消息框显示收到的信号。

请注意,为了确保正确的线程间通信,需要在连接信号和槽时使用Qt::QueuedConnection连接方式,以确保槽函数在主线程中执行。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?