我有一个多线程的qt应用程序。当我在mainwindow.cpp中进行一些进程时,同时我想从其他线程更新mainwindow.ui。Qt - 用第二个线程更新主窗口
我有mythread.h
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include "mainwindow.h"
class mythread : public QThread
{
public:
void run();
mythread(MainWindow* ana);
MainWindow* ana;
private:
};
#endif // MYTHREAD_H
mythread.cpp
mythread::mythread(MainWindow* a)
{
cout << "thread created" << endl;
ana = a;
}
void mythread::run()
{
QPixmap i1 (":/notes/pic/4mdodiyez.jpg");
QLabel *label = new QLabel();
label->setPixmap(i1);
ana->ui->horizontalLayout_4->addWidget(label);
}
但问题是,我不能达到ana->ui->horizontalLayout_4->addWidget(label);
我该怎么办呢?
如果你和我一样,而且你有10分钟的截止日期,这里是一个更加黑客的解决方案:在主窗口中添加一个虚拟按钮(宽度和高度为0),每当你需要从工作人员更新UI时在worker中发出click()事件并覆盖该按钮的click处理程序以执行更新。 – cristid9 2017-02-15 18:00:38