有一个基于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
能否请您解释一下为什么会发生以及如何处理?
答案 0 :(得分:0)
最有可能的是,QQuickPaintedItem
上的绘图没有被剪切,并且您绘制的矩形比您想象的要大。由于历史原因,这些矩形比您输入的尺寸宽一像素。因此您的矩形是151x151,不适合QPixmap
。