我確實有2個QDeclarativeItems。Qt傳播背景項目上的繪畫事件
void BackgroundLayer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
painter->drawImage(QRectF(dx1, dy1, dx2-dx1, dy2-dy1), shownImage, QRectF(sx1, sy1, sx2-sx1, sy2-sy1));
}
void ForegroundLayer::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
QPen pen(Qt::red, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
painter->setPen(pen);
painter->drawLine(p1, p2);
}
QML
Rectangle {
width: 1920
height: 1080
BackgroundLayer{
id: background_layer
anchors.fill: parent
}
ForegroundLayer {
id: foreground_layer
anchors.fill: parent
}
}
借鑑ForegroundLayer觸發BackgroundLayer油漆事件,導致其重繪整個圖像。因此,繪圖工作緩慢。是否有可能避免這種情況,只有在真正需要時才重新繪製圖像?
WA_OpaquePaintEvent和WA_TranslucentBackground使其稍快(出於某些原因),但圖像仍被重新繪製。這不起作用。 –
如果你把'BackgroundLayer'和'ForegroundLayer'放到'Rectangle {children:[]}裏面會發生什麼' – UmNyobe
'Rectangle {children:[]}'沒有變化' –