2016-10-18 1 views
1

저는 QGraphicsScene에 QGraphicsPixmapItem을 가지고 있는데,이를 QGraphicsView에서 확대하고 회전합니다. 회전이 없거나 너무 멀리 확대하지 않으면 모든 것이 효과적입니다. 그러나 확대 된 방식으로 (픽셀이 매우 눈에)니다) 이상한 일이 발생하면 회전합니다. 일부는 예상대로 이미지가 보이고, 일부는 픽스맵이 (부분적으로 또는 완전히) 사라지고 시간상의 수평 그래디언트가 이미지에 나타납니다 (이미지가 회전하는 동안에도 수평을 유지함).QGraphicsScene에서 확대/축소 및 회전 된 이상한 그리기 동작

image with gradientsenter image description here

첫번째 이미지는, 부과 별도 계통 (라인 컬렉션) (더 컬러 그라디언트가 없어야) 차트이다. 두 번째 이미지는 나의 최소한의 예제 (아래)에서 나온 것이며 부분적으로 빠진 픽스맵을 보여줍니다 (샷은 픽스맵의 가장자리에서 멀리 떨어져 있습니다).

다음은 내가 보는 대부분을 보여주는 간단한 예입니다. 이 주변

#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 

다른 파일은 이미지의 UI에서보기를 보유하고 QMainWindow 클래스와 리소스 파일, 그리고두고 그 메인은 모두가 Github project에서 사용할 수있는 기본 창 클래스를 실행합니다.

마우스 스크롤 휠을 사용하여 확대하고 화살표 키를 사용하여 회전하려면 (마우스로 이동할 수도 있습니다). 충분히 멀리 확대하고 회전하면 pixmap이 일부 각도에서 (부분적으로 또는 완전히) 사라집니다. 나는이 예에서 그래디언트를 재현 할 수 없었지만, 나는 이것이 동일한 문제의 또 다른 징후 일 뿐이라는 의심을 품고있다.

변환을 SmoothTransformation으로 설정하고 renderHint를 Antialiasing 및 HighQualityAntialiasing으로 설정하려고 시도했지만 어느 것도 큰 효과가 없었습니다. (안티 앨리어싱은 높은 줌에서 들쭉날쭉 한 부분을 부드럽게합니다.) 또한 QGraphicView, QGraphicsScene 관련 도면에서 많은 플래그를 토글하려고 시도했습니다. 아무도 이것이 왜 일어날 수 있는지 또는 내가이 문제를 해결하려고 노력할 수있는 이유를 알고 있습니까?

Qt의 현재 안정적인 버전으로 10/18/16에 다운로드 한 Qt 4.8.2 및 Qt 5.5.1에서이 문제가 발생했습니다.

+0

원본 이미지는 어떻게 생겼습니까? – xaxxon

+0

합법적 인 문제가있는 동안 문제의 원인을 추측 할 수 있습니다. [MCVE] (http://stackoverflow.com/help/mcve)를 제공하면 질문이 크게 향상됩니다. – TheDarkKnight

+0

방금 ​​MCVE를 게시했습니다. png가 포함되어 있습니다. – Chris

답변

0

limitation of x11과 관련이있는 것으로 보입니다. 기본적으로 충분히 큰 줌을 치면 최대 크기 값에 도달합니다.

회전이 왜 효과를 나타낼 지 아직 확실하지 않지만 다른 각도에서 달라질 이미지의 경계 사각형의 크기와 관련되어 있기 때문에 추측 할 수 있습니다. 내가 본 그라디언트는 부분적으로 사라지는 이미지뿐만 아니라 이상 할뿐만 아니라 모든 것이 관련되어있는 것으로 보입니다. 이것은 또 다른 표현입니다.

관련 문제