Вращение QGraphicsPixmapItem приводит к текстуре крайне низкого качества

Я использую QGraphicsScene и QGraphicsView для отображения QGraphicsPixmapItem.

Всякий раз, когда я поворачиваю элемент на что угодно, кроме 90, 180, 270 градусов, текстура отображается в крайне низком качестве. Изображение 1 показывает исходную текстуру (поворот на 0°), 2 показывает элемент, повернутый на 45°.

Я использую следующий код для отображения и поворота элемента:

QGraphicsPixmapItem *item = new QGraphicsPixmapItem(QPixmap("button.png"));
scene->addItem(item);

item->setTransformOriginPoint(70, 70); // button.png is 140px x 140px
item->setRotation(45);

С использованием

view->setRenderHints(QPainter::Antialiasing);

or

view->setRenderHints(QPainter::SmoothPixmapTransform);

не имеет значения.

Есть ли способ получить текстуры более высокого качества?

Оригинал45 градусов


person joekr    schedule 03.04.2013    source источник


Ответы (1)


У меня такая же проблема. Единственный способ, который я нашел, чтобы исправить это, состоял в том, чтобы переопределить QGraphicsItem::paint() и применить флаги QPainter::Antialiasing | QPainter::SmoothPixmapTransform в рисовальщик.

Как это:

void Rocket::paint(QPainter *painter,
                   const QStyleOptionGraphicsItem *option,
                   QWidget *widget)
{
  painter->setRenderHints( QPainter::Antialiasing | QPainter::SmoothPixmapTransform );
  painter->drawPixmap( boundingRect().topLeft(), myOriginalPixmap );
}
person Dimitry Ernot    schedule 03.04.2013
comment
Это работает и для меня. Тем не менее, я не доволен решением;) - person joekr; 04.04.2013