2017-05-29 118 views
0

我希望圖形場景能夠顯示覆蓋整個圖像的圖像。我創建具有相同大小的場景的圖像,但得到這樣的結果:在Qt整個QGraphicsScene上顯示圖像

enter image description here

可否請你所說的其實是錯誤的代碼?謝謝

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QGraphicsPixmapItem * image = new QGraphicsPixmapItem(QPixmap("C:\\data\\99.png")); 
    int imageWidth = image->pixmap().width(); 
    int imageHeight = image->pixmap().height(); 
    image->setOffset(- imageWidth/2, -imageHeight/2); 
    image->setPos(0, 0); 

    QGraphicsScene *scene = new QGraphicsScene(); 
    scene->setSceneRect(-imageWidth/2, -imageHeight/2, imageWidth, imageHeight); 
    QGraphicsView * gv = new QGraphicsView(); 
    ui->gridLayout->addWidget(gv); 
    gv->setScene(scene); 

    qInfo()<<"width image " <<imageWidth; // 640 
    qInfo()<<"height image " <<imageHeight; // 400 
    qInfo()<<"width scene " <<scene->width(); // 640 
    qInfo()<<"height scene " <<scene->width(); // 400 
    gv->scene()->addItem(image); 
    gv->show(); 

} 

回答

2

場景具有相同的圖像大小,但視圖沒有,視圖可以自由調整。

你需要的是讓視圖理解場景應該是100%的視圖。

爲此,創建一個從QGraphivsView繼承和覆蓋resizeEvent一類,具有如下功能:

void GraphicsView::resizeEvent(QResizeEvent *event) 
{ 
    QGraphicsView::resizeEvent(event); 
    fitInView(sceneRect(), Qt::IgnoreAspectRatio); 
    fixBackgroundPos(); 
} 

這將始終縮放QGraphivsView,以適應整個場景。

+0

非常感謝這麼快速的回答! – Zheden