显示函数状态的 QT 进度条
Posted
技术标签:
【中文标题】显示函数状态的 QT 进度条【英文标题】:QT Progress bar showing status of a function 【发布时间】:2014-03-21 06:42:29 【问题描述】:最近我正在使用 QT 开发点云库项目。我想知道我在使用函数时是否可以知道当前的进度。
例如,我使用名为estimate_normal
的公共函数创建了一个类名系统。在这个estimate_normal
中,我调用了PCL 库中的一些函数,并在MainWindow.cpp 中调用了
system a;
a.estimate_normal();
我可以通过使用QT进度条看到这个estimate_normal
状态知道进度吗?
谢谢
【问题讨论】:
【参考方案1】:您应该在堆上创建类“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() 槽中完成。
您应该使用“系统”类中的信号来通知用户界面中的进度条进度值。在您的 estimate_normal() 函数中,您应该发出具有适当值的信号。信号是这样的:
void progressChanged(int val);
您还应该将 progressChanged(int) 信号连接到 QProgressBar 的 setValue(int value) 槽。
最后一点是当它在另一个线程中时,你不应该直接调用estimate_normal()。正确的方法是将estimate_normal()定义为一个槽,并在你想调用estimate_normal()时将信号连接到该槽并发出信号。
【讨论】:
以上是关于显示函数状态的 QT 进度条的主要内容,如果未能解决你的问题,请参考以下文章