1

QScrollAreaにある内に画像を表示しようとしていQMainWindowます。

GUI

画像表示の固定サイズが必要で、読み込まれた画像がQScrollArea. 私の問題は、 より大きい画像をロードするとQScrollArea、画像が切り取られたように見えますが (これは問題ありません)、UI にスクロール バーが表示されないことです。

他のスタックオーバーフローの質問からのさまざまな推奨事項を考慮して、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 より大きい場合、スクロールバーが表示されないのはなぜですか?

4

1 に答える 1

0

生成された C++ コードの代わりに UI ファイル コンテンツを提供すると、さらに便利です。とにかく、それはscrollAreaWidgetContentsレイアウトを持っていないようです。Qt Designer でグリッド レイアウトを追加する必要があります。scrollAreaWidgetContentsこれを行った後、ラベルのサイズを変更したり、手動で変更したりする必要はありません。それらは自動的にサイズ変更されます。ラベルの呼び出しshowも必要ありません。デフォルトで表示されます (非表示にしない限り)。

于 2013-12-14T21:35:33.090 に答える