QLabel показывает изображение внутри QScrollArea

Я успешно реализовал средство просмотра изображений (для DICOM) в Qt. Я вижу изображение и могу правильно увеличивать и уменьшать масштаб.

Теперь я хочу видеть полосы прокрутки, если изображение слишком велико для отображения при увеличении.

Я использовал пользовательский интерфейс. Я разместил QScrollArea.Внутри QLabel. verticalScrollBarPolicyравно ScrollBarAsNeeded. horizontalScrollBarPolicy— это ScrollBarAsNeeded.

Проблема в том, что это не работает. Я увеличиваю масштаб, но полоса прокрутки не появляется.

Вторая попытка: использование макета внутри QScrollArea.

Итак, теперь есть QWidgetмежду QScrollArea и QLabel: горизонтальное расположение. Открыл то же изображение, теперь вижу вертикальную полосу прокрутки справа. Изображение растянуто слева направо. Когда я масштабирую, изображение получает правильную пропорцию.

НО... Я уменьшаю масштаб, и полоса прокрутки остается прежней, даже если я вижу все изображение. Горизонтальная полоса прокрутки никогда не появляется.

Изменение размера QLabel, похоже, не влияет. Но если я изменю размер QScrollArea (изменив размер главного окна), появится горизонтальная полоса прокрутки.

Я проверял некоторые числа:

В QScrollArea

  • Меняется его размер: ниже ширины 599 (почему это число? Я его нигде не вижу) появляется горизонтальная полоса.
  • sizeHint()всегда возвращает одни и те же значения: 33x41

В QLabel

  • Размеры меняются, но это не влияет.
  • sizeHint()всегда возвращает одни и те же значения: 560x1558

Вот код в формате 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>

Что я упустил? Спасибо.

6
задан Mark A. 11 June 2012 в 14:41
поделиться