У меня есть проблемы с позиционированием элементов управления в производной QMdiSubWindow. Я разработал свое окно с помощью QtDesigner, и оно выглядит так:
Когда я запускаю приложение, оно выглядит так (кнопка в строке заголовка):
Это нормально только в режиме максимизации:
Но я бы хотел, чтобы все выглядело нормально.
Вот часть файла .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).
Ну, добавление макета не решило проблему. Конечно, с одним все это работает лучше, чем без (масштабирование), но это было не главное. Проблема была в том, что я пропустил один абзац в документе:
Наиболее распространенный способ создания QMdiSubWindow — это вызов
QMdiArea :: addSubWindow () с внутренним виджетом в качестве аргумента. Вы
Вы также можете создать подокно самостоятельно и установить внутренний виджет
Вызов setWidget ().
Мое окно было разделено на подклассы из QMdiSubWindow, но я нигде не вызывал setWidget (). Эту проблему можно решить либо путем вызова этого метода при вызове QMdiArea :: addSubWindow (), либо путем изменения базового класса моего окна на другой, отличный от QMdiSubWindow (например, QWidget)
Итак — как всегда: RTFM 🙂
Когда вы помещаете более одного QWidget в форму Qt, вы всегда должны использовать какой-то вид QLayout, самый быстрый способ решить вашу проблему — выбрать все элементы в вашей форме и нажать кнопку макета сетки (тот, который имеет 3 x 3). маленькие квадраты) сверху дизайнерской коробки.