我已经在Qt中成功实现了Image Viewer(用于DICOM)。
我可以看到图像,并且可以正确放大和缩小。

现在,如果图像太大而无法放大时,我想查看滚动条。

我已经使用过用户界面。我放置了一个 QScrollArea 。里面是 QLabel
verticalScrollBarPolicy是ScrollBarAsNeeded。
horizo​​ntalScrollBarPolicy是ScrollBarAsNeeded。

问题是:它不起作用。我放大了,但是没有滚动条出现。

第二次尝试:使用QScrollArea内部的布局。

因此,现在QScrollArea和QLabel之间有一个 QWidget :水平布局。
打开相同的图像,现在我可以在右侧看到垂直滚动条。图像从左到右拉伸(stretch)。当我缩放图像时,它得到正确的比例。

但是...即使我可以看到整个图像,我也会缩小并且滚动条是相同的。水平滚动条永远不会出现。

调整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>
    

    我想念什么?谢谢你。

    最佳答案

    我知道这是一个过时的帖子-但是如果您或任何人仍然有问题,将QScrollArea::widgetResizable设置为false可能会有所帮助。

    至少,当我尝试类似的操作时,我的垂直滚动条始终被禁用(即使我将可滚动小部件的大小设置为大于视口(viewport)的高度),直到将其设置为false为止。

    没错,我认为它会更新可滚动小部件的大小,因此不需要滚动条。这使您可以执行我猜想的示例中的操作,并实现拉伸(stretch)配合功能。 (实际上,我要尝试的是适合宽度,只带有垂直滚动条)

    10-08 20:13