【发布时间】:2015-11-30 11:39:21
【问题描述】:
我希望 QProgressBar 在模式对话框中显示并在另一个线程工作时异步更新。
struct ProgressThread : public QThread
{
QDialog m_dialog;
QProgressBar * m_bar;
ProgressThread (QWidget * parent, int range)
: m_dialog (parent)
, m_bar (new QProgressBar ())
{
auto l = new QGridLayout (& m_dialog);
l -> addWidget (m_bar, 0, 0);
m_bar -> setRange (0, range);
}
void run () override
{
m_dialog .exec ();
}
};
ProgressThread thread (this, range);
thread .start ();
int num = 0;
for (each job)
{
do_some_work ();
thread .m_bar -> setValue (++ num);
}
thread .m_dialog .accept ();
thread .wait (1000);
thread .quit ();
除了进度条呈现为黑色块外,它基本上可以工作。为什么会这样?
【问题讨论】:
-
如果我在主线程中执行
(new QProgressBar ())->show();,它也会呈现黑色,并且仅在工作块完成后绘制。
标签: qt