2013-12-13 70 views
1

我試圖在位於QMainWindow上的QScrollArea內顯示圖像。Qt:在QScrollArea內顯示圖像(QLabel)

GUI

欲用於圖像顯示固定的大小,和滾動條顯示,如果加載的圖像是比QScrollArea更大。我的問題是,當我加載大於QScrollArea的圖像時,圖像顯示爲剪切(這沒問題),但UI上沒有出現滾動條。

考慮到其他計算器問題,考慮各種recommandations,這裏是從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也不是必需的,它將在默認情況下可見(除非您已將其隱藏)。