main.cpp
view plain
#include
#include
#include
#include “runnableInst.h”
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QProgressBar progressBar;
progressBar.setValue(50);
progressBar.show();
runnableInst* hInst = new runnableInst(&progressBar);
QThreadPool::globalInstance()->start(hInst);
return app.exec();
}
runnableInst.h
view plain
#ifndef RUNNABLEINST_H
#define RUNNABLEINST_H
#include
class QProgressBar;
class runnableInst : public QRunnable
{
public:
runnableInst(QProgressBar* progressBar);
virtual ~runnableInst();
void run();
private:
QProgressBar* m_ProgressBar;
};
#endif // RUNNABLEINST_H
runnableInst.cpp
view plain
#include “runnableInst.h”
#include
#include
-
runnableInst::runnableInst(QProgressBar* progressBar)
-
QRunnable(), m_ProgressBar(progressBar)
{
}
runnableInst::~runnableInst()
{
}
void runnableInst::run()
{
for(int step = 1; step <= 100; step++)
{
// 处理数据过程
//…
// 这两句只是测试用, 针对不同的环境可采用相应的进度反馈
QMetaObject::invokeMethod(m_ProgressBar, "setValue", Q_ARG(int, step));
QTest::qSleep(100);
//...
}
}
当QRunnable运行结束, 它自身会被销毁, 所以用不着担心内存泄露(除了指定设置setAutoDelete(false)); 不过要注意在数据或事件对象的处理~` 好比例子中QMetaObject::invokeMethod是比较危险的事!

1397

被折叠的 条评论
为什么被折叠?



