Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.8.0
-
None
-
Windows 7 32 bits
QtCreator 4.2.1 with Qt 5.8.0, based on mingw 5.3.0
-
8374b4016e730992ce72e69f81f183c518fdfe2c (qt/qtbase/wip/qt6)
Description
Hi,
I am contacting you about a problem in the QGraphicsView class.
I display a picture with a QGraphicsScene in QGraphicsView. The picture is added by QGraphicsPixmapItem in ARGB32 format. In this project, I use many various sizes of pictures. With some sizes and some scale values, I note a shift of the pixels. For each pixel from top to bottom ad from left to right, the shift increases, and last pixel in truncated.
Then , the coordinates of the others objects (Items,Mouse,etc...) in the QGraphicsView are no more aligned with the picture.
It does not appear all the time, but for some sizes of image, and some scales only. I don't understand why...
For example:
Picture size 1000x1000 :
Scale values with egde problem : 50x50 , 40x40, 30x30, 20x20
Picture size 50x50:
Scale values with egde problem : 100x100, 200x200,400x400
Picture size 1024x1024:
Scale values with egde problem : 50x50, 30x30
Picture size 2880x2880
Scale values with egde problem : 20x20
I need to know if it's a Qt Bug and if it will be fixed in further version, or if there is any problem in my code. Thank you in advance for your answer I hope as soon as possible .
Extract of my code:
class Lib_GraphicsView : public QGraphicsView { QGraphicsScene* m_qgsScene; QGraphicsPixmapItem* m_qgpiTotalPixmap; }
Lib_GraphicsView::Lib_GraphicsView(QWidget *parent) : QGraphicsView(parent) { m_qgsScene = new QGraphicsScene(this);m_qgpiTotalPixmap = new QGraphicsPixmapItem; m_qgpiTotalPixmap->setShapeMode(QGraphicsPixmapItem::BoundingRectShape); setMouseTracking(true); setTransformationAnchor(QGraphicsView::NoAnchor); setAlignment(Qt::AlignAbsolute); } void Lib_GraphicsView::LoadFirstPixmap(int ImgIndex) { m_qgpiTotalPixmap = m_qgsScene->addPixmap(QPixmap::fromImage(QImage(m_pImageRGB,m_dwDataWidth+m_nbLignes,m_dwDataHeight+m_nbLignes,QImage::Format_ARGB32))); setSceneRect(-250000,-250000,500000,500000); setScene(m_qgsScene); ... } void Lib_GraphicsView::Zoom(int Value) { ... resetTransform(); scale(Value, Value); ... }