• 3118阅读
  • 3回复

关于QThread和Qwidget [复制链接]

上一主题 下一主题
离线clannadzy
 

只看楼主 倒序阅读 楼主  发表于: 2015-04-14
我想做出的功能描述如下:按了某个按钮后,出现一个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,也是报错的,交叉包含了吗?
离线kimtaikee

只看该作者 1楼 发表于: 2015-04-14
UI操作不能放到线程中。

离线clannadzy

只看该作者 2楼 发表于: 2015-04-14
回 kimtaikee 的帖子
kimtaikee:UI操作不能放到线程中。 (2015-04-14 14:15) 

那么,请问,我该如何重新设计新的类,或者如何向widget类添加线程操作?
离线sharkoasis

只看该作者 3楼 发表于: 2015-04-14
gui只能在主线程中,你这个应该可以通过信号和槽解决
快速回复
限100 字节
 
上一个 下一个