我对Qt和GUI编程比较陌生,我有点难过。
我想更新QProgressBar
的进度,以便进度反映在课程中采取的操作。该课程正在进行大量操作,我希望能够根据这些操作的进度更新QProgressBar
:
class Worker
{
...
public:
void do_many_operations()
{
...
quint64 total_operations = ...;
for (...)
{
/* do some operations */
...
/* update the progress bar */
}
}
}
我所坚持的部分是如何以尽可能最好的方式更新QProgressBar
。
我有一个想法可能是在必要时让我的Worker
课程为QObject
和emit
更新,或者将QProgressBar
对象传递给{{1 } class Worker
。
非常感谢任何见解。
编辑:已更新,以反映我的意思是do_many_operations()
而不是QProgressBar
答案 0 :(得分:0)
在Qt处理事件之前,大多数小部件都不会进行任何更改。 您应该能够调用常规QStatusBar槽方法,然后调用应用程序的processEvents方法。
void do_many_operations()
{
/* Startup status bar */
myStatusBar.showMessage("Beginning many operations.");
QApplication::instance().processEvents();
quint64 total_operations = ...;
for (...)
{
/* do some operations */
/* update the status bar (probably want a more dynamic message... */
myStatusBar.showMessage("Doing work still");
QApplication::instance().processEvents();
}
/* clear the status bar, no need to processEvents. */
myStatusBar.clearMessage();
}
答案 1 :(得分:0)
只需致电setValue(int)
即可,或者如果您有某些信号,请将其与setValue(int)
联系起来。
当然,您之前必须setMaximum()
。