最近我正在使用QT开发Point cloud Library项目。我想知道当我使用函数时是否可以知道当前的进度。
例如,我使用名为estimate_normal
的公共函数创建一个类名系统。在这个estimate_normal
里面,我从PCL库调用一些函数,在MainWindow.cpp中调用
system a;
a.estimate_normal();
我可以通过使用QT进度条查看此estimate_normal
状态来了解进度吗?
由于
答案 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()时发出信号。