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()函数只做两件事:直接绘制一个矩形QPainter并绘制QPixmap包含相同矩形的矩形。但是如果我在构造函数中设置渲染目标FramebufferObject,这些矩形由于某种原因不匹配。如果我评论这个字符串,一切都很好。

FramebufferObject

使用 FramebufferObject

没有 FramebufferObject

没有 FramebufferObject

您能解释一下为什么会发生这种情况以及如何处理吗?

4

1 回答 1

0

最有可能的是,在 上绘图QQuickPaintedItem没有被剪裁,并且您绘制的矩形比您想象的要大。由于历史原因,矩形比您输入的尺寸宽 1 个像素。所以你的矩形是 151x151 并且不适合QPixmap.

于 2018-08-21T14:22:20.163 回答