2013-12-13 7 views
1

Я пытаюсь отобразить изображение внутри QScrollArea, расположенное на QMainWindow.Qt: отображение изображения (QLabel) внутри QScrollArea

GUI

Я хочу фиксированный размер для отображения изображения и полосы прокрутки появляются, если загруженное изображение больше, чем QScrollArea. Моя проблема заключается в том, что когда я загружаю изображение, которое больше, чем QScrollArea, изображение кажется вырезанным (это нормально), но в пользовательском интерфейсе нет полос прокрутки.

Принимая во внимание различное recommandations из других вопросов 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?

+1

Возможно, вам также нужно изменить размер 'scrollAreaWidgetContents'? Внешний вид прокрутки зависит от размера виджета. – vahancho

+0

Да, это сработало! – Smash

ответ

0

Было бы более полезным, если бы вы предоставили содержимое файла UI вместо сгенерированного кода на C++. Во всяком случае, кажется, что scrollAreaWidgetContents не имеет макета. В Qt Designer вам нужно добавить макет сетки. После этого вам не нужно изменять размер метки или scrollAreaWidgetContents вручную. Они будут автоматически изменены. Вызов show на этикетке также не требуется, он будет виден по умолчанию (если вы не спрятали его).