0

以下に基づく単純なクラスがあります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 を使用

それなし FramebufferObject

FramebufferObject なし

どうしてそうなるのか、対処法を教えてください。

4

1 に答える 1