我想做出的功能描述如下:按了某个按钮后,出现一个ProgressDialog,同时后台又能同步处理数据的功能。
第一次接触QThread,看了文档后,自己定义了一个Thread类(继承自QThread),然后override run函数。然后再widget类定义中声明了两个Thread对象,通过组成的方式,使GUI的对象能调用这两个线程对象的run函数。我在那个按钮上连接了一个用于执行两个线程对象的start函数的自定义槽。
文件结构如下:thread.h thread.cpp widget.h(包含thread.h) widget.cpp main.cpp
run功能重写如下:
void Thread::run(){
if(message == "OCR")
qDebug() << "OCR...\n";
else if (message == "Progress") {
qDebug() << "Progress...\n";
QProgressDialog *prodia = new QProgressDialog("working...","abort...",0,100,this);
qDebug() << "Progress...2\n";
prodia->setAutoClose(true);
for(int i = 0;i <= 100;i++)
{
prodia->setValue(i);
if(prodia->wasCanceled())
break;
}
}//else if
}
错误很明显,对象prodia的构造函数里的this指针有问题。
但是我不知如何 将 widget 的对象传入到thread.cpp文件里的这个函数。我通过在thread类里声明Widget w,也是报错的,交叉包含了吗?