2つのQDeclarativeItemがあります。 ForegroundLayer上での描画QMLQtはバックグラウンドアイテムにペイントイベントを伝播します
Rectangle {
width: 1920
height: 1080
BackgroundLayer{
id: background_layer
anchors.fill: parent
}
ForegroundLayer {
id: foreground_layer
anchors.fill: parent
}
}
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);
}
は、それが画像全体を再描画させる、BackgroundLayerペイントイベントをトリガします。結果として、描画が遅くなります。これを避け、本当に必要なときにのみイメージを再描画することは可能ですか?
WA_OpaquePaintEventとWA_TranslucentBackgroundは(何らかの理由で)少し速くなりますが、イメージはまだ再描画されます。これは動作しません。 –
'Rectangle {children:[}}'に 'BackgroundLayer'と' ForegroundLayer'を入れた場合どうなりますか – UmNyobe
'Rectangle {children:[}} 'の変更はありません –