gpt4 book ai didi

c++ - Qt中如何通过QThread管理主窗口

转载 作者:行者123 更新时间:2023-11-27 23:39:48 25 4
gpt4 key购买 nike

我的问题是以下一个:我有 2 个类(主窗口和 mythread),我从主窗口运行线程,我想从 mythread 显示我的主窗口的一些 QLabel:

我的线程.cpp :

void mythread::run()
{
while(1)
{
this->read();
}
}

void mythread::read()
{
RF_Power_Control(&MonLecteur, TRUE, 0);
status = ISO14443_3_A_PollCard(&MonLecteur, atq, sak, uid, &uid_len);
if (status != 0){
//display Qlabel in mainwindow
}
}

主窗口.cpp :

_thread = new mythread();
_thread->start();

最佳答案

你应该使用 Qt's signal/slot mechanism .该线程将发出一个信号,表示已读取新数据。任何感兴趣的对象都可以连接到该信号,并根据它执行操作。

这也适用于跨线程边界,如您的示例所示。在 Qt 中,要求只有主线程与 UI 元素交互。

这是一个大纲:

// Your mainwindow:
class MyWindow : public QMainWindow {
Q_OBJECT
// as needed
private slots:
void setLabel(const QString &t) { m_label->setText(t); }
};


// Your thread
class MyThread: public QThread {
Q_OBJECT
// as needed
signals:
void statusUpdated(const QString &t);
};

// in your loop
if (status != 0) {
emit statusUpdated("New Status!");
}

// in your mainwindow
_thread = new MyThread;
connect(_thread, &MyThread::statusUpdated, this, &MyWindow::setLabel);
_thread->start();

关于c++ - Qt中如何通过QThread管理主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56182455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com