以下に基づく単純なクラスがありますQQuickPaintedItem
。
class PaintedItem : public QQuickPaintedItem
{
Q_OBJECT
public:
PaintedItem();
void paint(QPainter *painter) override;
};
// ...
PaintedItem::PaintedItem()
{
setRenderTarget(QQuickPaintedItem::FramebufferObject);
}
void PaintedItem::paint(QPainter *painter)
{
painter->drawRect(0, 0, 150, 150);
QPixmap* m_pixmap = new QPixmap(width(), height());
m_pixmap->fill(QColor("transparent"));
QPainter painter2(m_pixmap);
painter2.setPen(QColor("red"));
painter2.drawRect(0, 0, 150, 150);
painter->drawPixmap(0, 0, *m_pixmap);
}
このpaint()
関数は 2 つのことを行うだけです: で長方形を直接描画し、同じ長方形を含むQPainter
を描画します。QPixmap
しかし、レンダー ターゲットをFramebufferObject
コンストラクターのように設定すると、それらの四角形が何らかの理由で一致しなくなります。この文字列にコメントを付ければ、すべて問題ありません。
と FramebufferObject
それなし FramebufferObject
どうしてそうなるのか、対処法を教えてください。