У меня есть QGraphicsPixmapItem в QGraphicsScene, который затем я увеличиваю и поворачиваю в QGraphicsView. Все работает отлично, если нет вращения или если я не задвигаю слишком далеко, однако, когда я увеличиваю масштаб (пиксели очень заметны) и вращаются вокруг странных вещей. Некоторое время изображение выглядит так, как я ожидал бы, некоторое время изображение pixmap исчезает (частично или полностью), а некоторые из них отображаются на изображении горизонтально (они остаются горизонтальными, даже когда изображение вращается).Странное поведение чертежа для QGraphicsPixmapItem в увеличенном и повернутом в QGraphicsScene
Первое изображение представляет диаграммы (не должно быть никаких цветовых градиентов) с отдельной сетки (сбор линий), введенного над ним. Второе изображение получается из моего минимального примера (ниже) и показывает частично отсутствующую pixmap (выстрел находится далеко от края pixmap).
Ниже приведен простой пример, демонстрирующий большую часть того, что я вижу.
#ifndef VIEW_H
#define VIEW_H
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>
class View : public QGraphicsView
{
Q_OBJECT
public:
explicit View(QWidget *parent = 0) :
QGraphicsView(parent)
{
setDragMode(QGraphicsView::ScrollHandDrag);
QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap(":/images/chart.png"));
pixmapItem->setTransformationMode(Qt::SmoothTransformation);
QGraphicsScene *scene = new QGraphicsScene();
scene->addItem(pixmapItem);
setScene(scene);
}
protected Q_SLOTS:
void wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
scale(1.25, 1.25);
else
scale(0.8, 0.8);
}
void keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Left)
rotate(1);
else if(event->key() == Qt::Key_Right)
rotate(-1);
}
};
#endif // VIEW_H
Другие файлы, окружающие этого являются файл ресурсов с изображением, класс QMainWindow, который держит View в ш и главный, который ставит выполняет главный класс окна, все из которых доступны в Github project.
Для воспроизведения увеличенного изображения с помощью колесика прокрутки мыши и поворота с помощью клавиш со стрелками (вы также можете панорамировать мышью). Если вы приближаетесь достаточно далеко и вращаетесь, pixmap исчезнет (частично или полностью) под некоторым углом. Я еще не смог воссоздать градиенты в этом примере, но мое подозрение в том, что они являются еще одним проявлением той же проблемы.
Я попытался установить преобразование в SmoothTransformation и установить renderHint как для сглаживания, так и для HighQualityAntialiasing, но ни один из них не имел большого эффекта (сглаживание сглаживает зубы при больших масштабах). Кроме того, я попытался переместить множество флагов в рисунок QGraphicView, связанный с QGraphicsScene. Кто-нибудь знает, почему это может произойти или что я могу попытаться решить?
Я видел эту проблему как в Qt 4.8.2, так и в Qt 5.5.1, которые я загрузил 10/18/16 в качестве текущей стабильной версии Qt.
Какое оригинальное изображение выглядит? – xaxxon
Как бы то ни было, хотя у вас есть законная проблема, мы можем только догадываться о том, что вызывает проблему. Предоставление [MCVE] (http://stackoverflow.com/help/mcve) значительно улучшит вопрос. – TheDarkKnight
Я только что разместил MCVE, он включает в себя png. – Chris