QT进度条显示功能的状态

时间:2014-03-21 06:42:30

标签: c++ multithreading qt progress-bar qthread

最近我正在使用QT开发Point cloud Library项目。我想知道当我使用函数时是否可以知道当前的进度。

例如,我使用名为estimate_normal的公共函数创建一个类名系统。在这个estimate_normal里面,我从PCL库调用一些函数,在MainWindow.cpp中调用

system a;
a.estimate_normal();

我可以通过使用QT进度条查看此estimate_normal状态来了解进度吗?

由于

1 个答案:

答案 0 :(得分:3)

您应该在堆上创建类“system”的对象并将其移动到新线程,以防止estimate_normal()阻塞主线程和UI。这可以这样做:

a = new system();
QThread * th = new QThread();
a->moveToThread(th);

QObject::connect(th,SIGNAL(started()),a,SLOT(OnStarted()));
QObject::connect(th,SIGNAL(finished()),a,SLOT(OnFinished()));

th->start();

“system”类中的初始化和终止任务应分别在OnStarted()和OnFinished()插槽中完成。

您应该使用“system”类中的信号来通知用户界面中进度条的进度值。在您的estimate_normal()函数中,您应该使用适当的值发出信号。信号如下:

void progressChanged(int val);

您还应该将progressChanged(int)信号连接到QProgressBar的setValue(int value)插槽。

最后一点是,当它在另一个线程中时,你不应该直接调用estimate_normal()。正确的方法是将estimate_normal()定义为一个槽并将信号连接到该槽并在您想调用estimate_normal()时发出信号。