QGraphicsView适合任何大小的图像,没有滚动条

时间:2017-07-07 13:47:48

标签: c++ qt qgraphicsview

我的工作环境: Qt 5.8 MSVC2015 64位,QT GraphicsView,QGraphicsObject,Windows 7 64位。

我正在使用QImage加载任何大小的图像, 尝试适合固定大小的QGraphicsView(宽度200 X高度200)。我不想在QGraphicsView中使用滚动条。

在下面的示例中:

  1. 我的QGraphicsView尺寸将始终固定宽度200 X高度200。
  2. 我的图片尺寸可能会有所不同,但在下面的代码我的图片      宽度182 *高度174。
  3. 那么我如何才能在修复大小QGraphicsView中使用图像?

     QImage *ImageData;
     QGraphicsView*  _ThumbNailView = new QGraphicsView(this);
    _ThumbNailView->setFixedSize(200, 200);  //QGraphicsView will be alwyas constant.
     QGraphicsScene*    _scene =  new QGraphicsScene();
    _scene->setSceneRect(0,0,200,200);
     ..........
    
    
     myQGraphicsItem* _thumbsquare = new myQGraphicsItem(imageWidth, imageHeight, ImageData);
    
    
     //Load image from buffer
        unsigned char *buffer;   ////some image Data get loaded here. 
        int imageWidth = 182;   //I am getting image Width 182, or any size.
        int imageHeight = 174; //I am getting image Height 174 or any size.
        size_t  size = imageWidth * imageHeight * 3;
        int  bytesPerLine = size / imageHeight;
        QImage* _image = new  QImage(reinterpret_cast<const uchar *>(buffer),182, 174, bytesPerLine, QImage::Format_RGB888);
        _thumbsquare->setMyImage(QImage);
    
    ...........    
    
     int width = _ThumbNailView->geometry().width();    // always const 200
     int height = _ThumbNailView->geometry().height(); // always const 200
    _ThumbNailView->resize(width, height);
    _scene->addItem(_thumbsquare);
    _scene->setSceneRect(_scene->itemsBoundingRect());
    
    // This don't work, make image very small
    //_ThumbNailView->fitInView(QRectF(0, 0, 200, 200));
    

    以上代码结果

    Above Code OutPut

    没有滚动条的预期完整图像

    Image Without Scroll bar

    我们非常感谢您的建议或帮助吗?

1 个答案:

答案 0 :(得分:0)

@ Eligijus,感谢您的帮助,帮助我找到解决方案。

我的代码更改了:

QRectF bounds = _scene->sceneRect();
QRectF rect  {0,0,200,200};
if (bounds.width() < 200)
{
    rect .setWidth(bounds.width());
    bounds.setWidth(200);
}
if (bounds.height() < 200)
{
    rect.setWidth(bounds.height());
    bounds.setHeight(200);
}
 _ThumbNailView->fitInView(bounds, Qt::KeepAspectRatio);
 QRectF changeRect  = _scene->sceneRect();
_ThumbNailView->updateGeometry();

但是如果图像尺寸小于200,那么你将面临问题,否则事情就会顺利进行。