gpt4 book ai didi

c++ - 我如何才能优先发布绘画事件?

转载 作者:行者123 更新时间:2023-11-28 02:26:41 26 4
gpt4 key购买 nike

我在使用 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

这是我的问题的根源,我每 16 毫秒一次更新一个包含 240 个 QLabels 的数组:

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);} }

编辑:这是程序的作用以及 QLabel 为何如此重要的示例图像(我的程序是左侧的窗口):

example

最佳答案

有两种解决方案(在许多解决方案中):

  1. 在更新标签时,禁用标签的父小部件的更新。完成标签更新后重新启用更新。

  2. 使用 QGraphicsView 并在其中放置 QGraphicsPixmapItem,而不是标签。

优先处理绘画事件并没有帮助,因为它们都针对不同的小部件。如果它们都用于同一个小部件,那么您无需执行任何操作,因为事件已经合并并且事件循环中只能存在给定小部件的一次重绘。

关于c++ - 我如何才能优先发布绘画事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com