C++ 显示函数状态的QT进度条

C++ 显示函数状态的QT进度条,c++,multithreading,qt,progress-bar,qthread,C++,Multithreading,Qt,Progress Bar,Qthread,最近我正在使用QT进行点云库项目。我想知道当我使用一个函数时,我是否能知道当前的进度 例如,我使用名为estimate\u normal的公共函数创建了一个类名系统。在这个estimate\u normal中,我从PCL库调用一些函数,并在MainWindow.cpp中调用 system a; a.estimate_normal(); 我可以通过使用QT进度条查看此estimate\u normal状态来了解进度吗 谢谢您应该在堆上创建类“system”的对象,并将其移动到新线程,以防止est

最近我正在使用QT进行点云库项目。我想知道当我使用一个函数时,我是否能知道当前的进度

例如,我使用名为
estimate\u normal
的公共函数创建了一个类名系统。在这个
estimate\u normal
中,我从PCL库调用一些函数,并在MainWindow.cpp中调用

system a;
a.estimate_normal();
我可以通过使用QT进度条查看此
estimate\u normal
状态来了解进度吗


谢谢

您应该在堆上创建类“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”中的初始化和终止任务应分别在onStart()和OnFinished()插槽中完成

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

void progressChanged(int val);
还应将progressChanged(int)信号连接到QProgressBar的setValue(int-value)插槽

最后一点是,当estimate_normal()位于其他线程中时,不应直接调用它。正确的方法是将estimate_normal()定义为一个插槽,并将一个信号连接到该插槽,然后在需要调用estimate_normal()时发出该信号