QQuickPaintedItem paint()报告错误,无法从另一个线程停止计时器,这似乎导致子线程无休止的循环?

问题描述 投票:0回答:1

我的代码如下:

void DrpltGyslPanel::paint(QPainter *painter)
{
    view_->render(painter, boundingRect(), view_->viewport()->rect(), Qt::KeepAspectRatio);
}

DrpltGyslPanelQQuickPaintedItem的子类,view_QGraphicsView的实例。我知道update()QSGRenderThread中被调用了,但是此Timer的作用是什么?而且这也导致子线程无休止的循环。如何准确地杀死计时器?还是导致子线程无限循环的又一步骤?

qt qml qtquick2 qgraphicsview
1个回答
0
投票

[可能,调用render将在内部停止另一个线程中的计时器。您无法在另一个线程中的QPainter上绘制。您可以要求_view将其自身渲染为QImage,然后使用另一个信号将其发送回DrpltGyslPanel。您还可以在QImage中拥有一个DrpltGyslPanel实例,与_view共享它,并使用QMutex阻止这些线程读取或写入QImage

© www.soinside.com 2019 - 2024. All rights reserved.