Я пытаюсь отобразить изображение внутри QScrollArea
расположен на QMainWindow
,
Я хочу фиксированный размер для отображения изображения и полосы прокрутки, если загруженное изображение больше, чем QScrollArea
, Моя проблема в том, что когда я загружаю изображение, которое больше, чем QScrollArea
изображение выглядит обрезанным (что нормально), но полосы прокрутки в пользовательском интерфейсе не отображаются.
Принимая во внимание различные рекомендации из других вопросов stackoverflow, вот сгенерированный код от дизайнера Qt:
mImageScrollArea = new QScrollArea(centralWidget);
mImageScrollArea->setObjectName(QString::fromUtf8("mImageScrollArea"));
mImageScrollArea->setGeometry(QRect(440, 0, 400, 700));
mImageScrollArea->setWidgetResizable(false);
scrollAreaWidgetContents = new QWidget();
scrollAreaWidgetContents->setObjectName(QString::fromUtf8("scrollAreaWidgetContents"));
scrollAreaWidgetContents->setGeometry(QRect(0, 0, 398, 698));
mLabel = new QLabel(scrollAreaWidgetContents);
mLabel->setObjectName(QString::fromUtf8("mLabel"));
mLabel->setGeometry(QRect(0, 0, 400, 700));
QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(mLabel->sizePolicy().hasHeightForWidth());
mLabel->setSizePolicy(sizePolicy);
mLabel->setScaledContents(true);
mImageScrollArea->setWidget(scrollAreaWidgetContents);
Когда изображение загружено, я отображаю его в метке следующим образом:
QPixmap wPixmap = QPixmap::fromImage(mImage);ui.mLabel->resize(wPixmap.size());
ui.mLabel->setPixmap(wPixmap);
ui.mLabel->show();
Почему полосы прокрутки не отображаются, если загружаемое изображение больше, чем QScrollArea?
Было бы более полезно, если вы предоставляете содержимое файла пользовательского интерфейса вместо сгенерированного кода C ++. Во всяком случае, кажется, что scrollAreaWidgetContents
не имеет макета. Вам нужно добавить макет сетки в Qt Designer. После этого вам не нужно будет изменять размер ярлыка или scrollAreaWidgetContents
вручную. Они будут изменены автоматически. призвание show
на ярлыке тоже не требуется, он будет виден по умолчанию (если вы его не спрятали).
Других решений пока нет …