Qt:在QScrollArea中显示图像(QLabel)

时间:2013-12-13 16:35:27

标签: c++ image qt qlabel qscrollarea

我正在尝试在QScrollArea上的QMainWindow内显示图片。

GUI

我希望图像显示的大小固定,如果加载的图像大于QScrollArea,则会显示滚动条。我的问题是当我加载大于QScrollArea的图像时,图像显示为剪切(这没关系),但UI上没有滚动条。

考虑到其他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 个答案:

答案 0 :(得分:0)

如果您提供UI文件内容而不是生成的C ++代码,那将会更有帮助。无论如何,似乎scrollAreaWidgetContents没有布局。您需要在Qt Designer中为其添加网格布局。执行此操作后,您无需手动调整标签或scrollAreaWidgetContents的大小。它们将自动调整大小。也不需要在标签上调用show,默认情况下它将是可见的(除非您已将其隐藏)。