显示函数状态的 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 进度条的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm自定义进度条

Qt编写自定义控件13-多态进度条

Qt中如何改变QProgressBar中进度条的颜色?

Qt 在 Dock 中显示进度条 (macOS)

GDAL算法进度条使用说明

Qt 进度条