Элементы позиционирования qt в QMdiSubWindow

У меня есть проблема с позиционированием элементов управления в производной QMdiSubWindow. Я разработал свое окно с помощью QtDesigner, и оно выглядит так:Vew в QtDesigner

Когда я запускаю приложение, оно выглядит так (кнопка в строке заголовка): Вид приложения (нормальный mdisubwinЭто нормально только в режиме максимизации: Вид приложения (mdisubwin развернутоНо я бы хотел, чтобы все выглядело нормально. Вот часть файла.ui:

 <widget class="QPushButton" name="btnToggleEdit">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>Edit</string>
   </property>
  </widget>

Кажется, как будто он отображается относительно угла окна - независимо от строки заголовка окна... Как я могу это исправить? Я использую Qt 5.2.1 (и надстройку qt для Visual Studio 2010).

2 ответа

Решение

Ну, добавление макета не решило проблему. Конечно, с одним все это работает лучше, чем без (масштабирование), но это было не главное. Проблема была в том, что я пропустил один абзац в документе:

Наиболее распространенный способ создания QMdiSubWindow - это вызов QMdiArea:: addSubWindow () с внутренним виджетом в качестве аргумента. Вы также можете создать подокно самостоятельно и установить внутренний виджет, вызвав setWidget ().

Мое окно было разделено на подклассы из QMdiSubWindow, но я нигде не вызывал setWidget (). Эта проблема может быть исправлена ​​либо путем вызова этого метода при вызове QMdiArea:: addSubWindow (), либо путем изменения базового класса моего окна на другой, отличный от QMdiSubWindow (например, QWidget)

Итак - как всегда: RTFM:)

Когда вы помещаете более одного QWidget в форму Qt, вы всегда должны использовать какой-то вид QLayout, самый быстрый способ решить вашу проблему - выбрать все элементы в вашей форме и нажать кнопку макета сетки (тот, который имеет 3 x 3). маленькие квадраты) сверху дизайнерской коробки.

Другие вопросы по тегам