2013-04-03 2 views
2

Я использую QGraphicsScene и QGraphicsView для отображения QGraphicsPixmapItem.Поворот 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); 

или

view->setRenderHints(QPainter::SmoothPixmapTransform); 

не делает разницы.

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

Original 45degree

ответ

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); 
} 
+0

Это работает для меня. Однако я не доволен решением;) – joekr