Рисование непосредственно с помощью QPainter и рисование QPixmap дают разные результаты
Есть простой класс, основанный на 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
Не могли бы вы объяснить, почему это происходит и как с этим бороться?
1 ответ
Скорее всего, опираясь на QQuickPaintedItem
не обрезается, и вы рисуете прямоугольник большего размера, чем вы думаете. По историческим причинам прямоугольники на один пиксель шире, чем введенный вами размер. Таким образом, ваш прямоугольник 151x151 и не вписывается в QPixmap
,