• 6009阅读
  • 2回复

关于线程里面调用QProgressDialog的问题~ [复制链接]

上一主题 下一主题
离线aoxuehan
 

只看楼主 倒序阅读 楼主  发表于: 2009-12-24
最近做一个东西。有个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重新编辑 ]
常梦想自己是地主家的少爷
整天游手好闲,不学无术
没事儿带着一帮狗奴才在大街上调戏良家妇女。
离线yb824
只看该作者 1楼 发表于: 2009-12-24
搞反了吧
我觉得应该是图片识别那部分放到单独一个线程,进度条在gui线程
离线aoxuehan

只看该作者 2楼 发表于: 2009-12-24
想那样来着。
但是不好实现。。。

现在没办法了。正在尝试改。
常梦想自己是地主家的少爷
整天游手好闲,不学无术
没事儿带着一帮狗奴才在大街上调戏良家妇女。
快速回复
限100 字节
 
上一个 下一个