2013-07-18 1 views
5

Я переопределял QGraphicsView, чтобы сцена была увеличена с помощью события колеса мыши. Сцена содержит несколько QGraphicsPixmapItem. Колесные события звонят QGraphicsView :: scale (qreal sx, qreal sy)Сглаживание, не работающее в QGraphicsView

Все работает отлично, но рендеринг. Когда я уменьшаю масштаб (сцена становится меньше), появляется сглаживание. Я попытался установить рендер намеки следующим образом в повторной реализации QGraphicsView конструктор:

ImageViewer::ImageViewer(QWidget * parent) : 
    QGraphicsView(parent) 
{ 
    setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::HighQualityAntialiasing); 
} 

Я все еще вижу эти артефакты. Как я могу избавиться от этого?

+0

Не можете опубликовать снимок экрана о том, что происходит? Вы устанавливаете какую-либо стратегию кэширования для элементов? – peppe

+0

Спасибо @peppe! Я ничего не рассказываю о кешировании, поэтому я думаю, что это по умолчанию. Вот пример того, как он выглядит [до] (https://lh6.googleusercontent.com/-e2pH06jhy94/Ue09l8A1SWI/AAAAAAAAY08/YGa-wj9ollY/w958-h599-no/Fullscreen+capture+7222013+100003+AM.jpg) (Соотношение 1: 1 пикселей) и [после] (https://lh4.googleusercontent.com/-PZJVX0jl6yw/Ue09mo_Iu2I/AAAAAAAAY1E/nMf28uA9MlE/w958-h599-no/Fullscreen+capture+7222013+100007+AM.jpg) (менее 1: 1 пиксель). Вы увидите некоторое сглаживание в концентрических кругах. – Algo

ответ

3

См. Мои комментарии для this question.

В основном вы должны позвонить setTransformationMode(Qt::SmoothTransformation) по адресу QGraphicsItem s, к которому вы хотите применить сглаживание.

Вызов setRenderHints на вид не сработал для меня.

+0

Итак, нет способа получить сглаженный фон? Изменить: Nm была ошибкой в ​​моем коде. – Timmmm

 Смежные вопросы

  • Нет связанных вопросов^_^