Размер QGraphicsView
будет изменен на QGridLayout
после отображения виджета, а также может быть изменен позже, когда само окно будет изменено.
Таким образом, вы должны изменить размер растрового изображения в результате QResizeEvent
, либо путем подкласса QGraphicsView
переопределить resizeEvent()
, а затем преобразовать ваш объект представления в новый класс в конструкторе, чтобы использовать его вместо QGraphicsView
или установив объект MainWindow
в качестве фильтра событий для представления, которое обрабатывает событие resize из функции MainWindow::eventFilter
.
Вы, вероятно, не хотите изменять размер растрового изображения в сцене, а скорее отрегулируйте матрицу вида так, чтобы ваш QGraphicsPixmapItem
идеально вписывался в вид, с QGraphicsView::fitInView
.
Например:
/* QGraphicsPixmapItem *pixmapItem; as a MainWindow member */
pixmapItem = scene->addPixmap(newmapImage);
/* Either always disable or enable the scrollbars (see fitInView doc) */
ui->mapView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->mapView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->mapView->installEventFilter(this);
...
bool MainWindow::eventFilter(QObject *obj, QEvent *evt) {
if(obj == ui->mapView && evt->type() == QEvent::Resize) {
ui->mapView->fitInView(pixmapItem, Qt::KeepAspectRatioByExpanding);
}
// Call the base class implementation
return QMainWindow::eventFilter(obj, evt);
}