我正在使用 Qt 制作的程序出现性能问题。问题源于我每 16 毫秒更新一次的大量位图;全部更新大约需要 300 毫秒。我对此并不满意,但更大的问题是这会在 UI 的其余部分造成滞后。我希望能够降低更新的优先级,以便大量的 paintEvents 不会阻塞 UI 其余部分的事件循环,但我遇到了困难。由于update()
并repaint()
没有优先级参数,我尝试使用QCoreApplication::postEvent()
,但似乎不允许我以这种方式调用paintEvent,因为我收到以下错误消息:
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setOpacity: Painter not active
QPainter::setFont: Painter not active
QWidget::paintEngine: Should no longer be called
这是我的问题的根源,一个包含 240 个的数组QLabels
,我每 16 毫秒一次更新一次:
if (ui->objectSlotTabs->currentIndex() == 1) {
for (int c = 0; c < 240; c++) {
QEvent* event = new QEvent(QEvent::Paint);
QCoreApplication::postEvent((*(ui->mArray))[c], event, -1);} }
编辑:这是程序做什么以及为什么 QLabels 如此重要的示例图像(我的程序是左侧的窗口):