最近做一个东西。有个mainWindow。因为有一部分是图片识别过程。很慢。所以想用个进度条。但是如果直接在mainWindow的类里面新建一个进度条的话,会出现假死状态,(因为这个时候主线程在执行文字识别),所以我就像再写一个类,并且public QThread,然后再run方法里面显示进度条。类如下:
class progressDialogThread : public QThread
{
Q_OBJECT
public:
progressDialogThread()
{
iMaxValue = 100000;
}
~progressDialogThread()
{
QMessageBox::information(NULL,"123","123");
}
protected:
void run()
{
progress = new QProgressDialog("请稍后,正在导入文件", "取消", 0, iMaxValue,NULL);
progress->setWindowModality(Qt::WindowModal);
progress->show();
for (int i = 0; i < iMaxValue ; i++)
{
progress->setValue(i);
if (progress->wasCanceled())
break;
}
}
private:
int iMaxValue;
QProgressDialog *progress;
};
运行的时候,假设点击一个按钮,就调用这个类的一个实例的start()方法。出错:
widgets must be created in the gui thread
但是我如果直接调用run();就没问题。
但是线程不可能在程序中直接调用run()吧。。 会带来很多问题~
怎么解决啊????
谢谢~~
[ 此帖被aoxuehan在2009-12-24 16:13重新编辑 ]