Как настроить изменение размера виджета в соответствии с размером главного окна?
Решил учиться писать собственные приложения и столкнулся с непониманием Qt Designer.
Полная задача:
Тут подробнее изложена идея. Уже советовался по реализации: Как создать персональный виджет в главном окне?
Коротко:
Хочу написать простенькую прогу, в одно окно. В нем 3 отдельных под-окна (см. скриншот, предположительно что-то показываю). Мне советовали использовать QSplitter. Это решило тот вопрос, но возникли следующие проблемы.
ВОПРОС:
- Как реализовать изменения размеров виджетов с изменением размеров главного окна?
- Можно ли это сделать в Qt Designer?
Я видел подобные вопросы, но там создавались окна с фиксированными шаблонами (кнопки, текст, окно и тд.). В то же время у меня живые окна с возможностью вручную менять габариты. Тем более, если выбрать LayOut для Центрального виджета, я не смогу создать splitter для 3 окон (в моем случае QFrame, ведь в будущем собираюсь добавлять туда функционал )
- Можно ли в том же Qt Designer добавить условия увеличения?
Хотелось бы, чтоб темно-серое и светло-зеленое окна увеличивались с главным окном, не меняя соотношения сторон 1х1.
UPDATE
Ui файл. ПанельМеню я хотел делать вручную, так что это стоит учесть.
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GcsWindow</class>
<widget class="QMainWindow" name="GcsWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>GcsWindow</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="minimumSize">
<size>
<width>1000</width>
<height>600</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>1</width>
<height>1</height>
</size>
</property>
<property name="baseSize">
<size>
<width>1000</width>
<height>600</height>
</size>
</property>
<widget class="QPushButton" name="BUT_Menu">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>80</width>
<height>30</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">QPushButton {
background-color: rgb(235,235,235);
border-radius: 1px;
Text-align:center;
}
QPushButton:hover{
background-color:rgb(225, 225, 225);
}
QPushButton:pressed {
background-color: rgb(200,200,200);
border-style: inset;
}
QPushButton:open{
background-color: rgb(200,200,200);
border-style: inset;
}</string>
</property>
<property name="text">
<string>MENU</string>
</property>
</widget>
<widget class="QSplitter" name="splitter_2">
<property name="geometry">
<rect>
<x>0</x>
<y>31</y>
<width>1000</width>
<height>569</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="handleWidth">
<number>1</number>
</property>
<widget class="QSplitter" name="splitter">
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="handleWidth">
<number>1</number>
</property>
<widget class="QFrame" name="frame">
<property name="baseSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(49, 49, 49);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
<widget class="QFrame" name="frame_2">
<property name="baseSize">
<size>
<width>300</width>
<height>269</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(213, 255, 216);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
<widget class="QFrame" name="frame_3">
<property name="styleSheet">
<string notr="true">background-color: rgb(248, 194, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>
Ответы (1 шт):
Вы можете просто создать разделитель, содержащий элементы, в Qt Designer:
Сначала разместите свои виджеты в дизайнере (их не должно быть в макете).
Выберите виджеты, которые вы хотите включить в разделитель (удерживая CTL и нажимая на них)
Щелкните правой кнопкой мыши выбранный виджет и в меню Layout и
выберитеLay Out Horizontally in SplitterилиLay Out Vertically in Splitter.Теперь примените
layoutсетки к выбранным виджетам.
q1322996.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>480</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0">
<item>
<widget class="QSplitter" name="splitter_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="0">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QFrame" name="frame_2">
<property name="minimumSize">
<size>
<width>150</width>
<height>150</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(85, 255, 127);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
<widget class="QFrame" name="frame_3">
<property name="minimumSize">
<size>
<width>150</width>
<height>150</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(85, 255, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QFrame" name="frame_4">
<property name="minimumSize">
<size>
<width>300</width>
<height>300</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 170, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>21</height>
</rect>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

