【发布时间】:2012-06-14 10:48:04
【问题描述】:
我已经在 Qt 中成功实现了一个图像查看器(用于 DICOM)。 我可以看到图像并且可以正确放大和缩小。
现在,如果图像太大而无法在放大时显示,我想查看滚动条。
我已经使用了 UI。我放置了一个QScrollArea。在里面,QLabel。 verticalScrollBarPolicy 是 ScrollBarAsNeeded。 horizontalScrollBarPolicy 是 ScrollBarAsNeeded。
问题是:它不起作用。我放大了,但没有出现滚动条。
第二次尝试:使用 QScrollArea 内的布局。
所以现在在 QScrollArea 和 QLabel 之间有一个 QWidget:水平布局。 打开相同的图像,现在我可以在右侧看到一个垂直滚动条。图像从左到右拉伸。当我缩放图像时,它会得到正确的比例。
但是...我缩小并且滚动条是相同的,即使我可以看到整个图像。水平滚动条永远不会出现。
调整 QLabel 的大小似乎没有影响。但是,如果我调整 QScrollArea 的大小(调整主窗口的大小),就会出现水平滚动条。
我一直在检查一些数字:
在 QScrollArea 中
- 它的大小发生变化:宽度低于 599(为什么是这个数字?我在任何地方都看不到它)出现水平条。
- sizeHint() 总是返回相同的值:33x41
在 QLabel 中
- 尺寸发生变化,但这不影响。
- sizeHint() 总是返回相同的值:560x1558
这是来自 UI 设计器的 XML 代码:
<widget class="QWidget" name="centralWidget">
<property name="autoFillBackground">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>637</width>
<height>649</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="miImagen">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="autoFillBackground">
<bool>true</bool>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
我错过了什么?谢谢。
【问题讨论】:
-
“放大”是什么意思?只有当
QLabel大于QScrollArea时才会出现滚动条。 -
是的,当我放大时,QLabel 变得更大,因为我在该图像中获得了更多细节。图像变大了。
-
请在您创建和设置小部件属性的位置发布代码。
-
已添加 XML 代码。我猜这是因为 QScrollArea 没有注意到 QLabel 正在改变它的大小,所以它只在我改变它的尺寸时才响应,而不是 QLabel 的尺寸。
标签: image qt scrollbar qlabel qscrollarea