2014-10-11 4 views
2

Я хочу создать приложение, состоящее из QLineEdit и двух QTableView виджетов в вертикальной компоновке.Как сделать виджеты Qt изменяемыми по размеру?

Пример код:

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>Dialog</class> 
<widget class="QDialog" name="Dialog"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>400</width> 
    <height>300</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Dialog</string> 
    </property> 
    <widget class="QWidget" name="verticalLayoutWidget"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>401</width> 
    <height>301</height> 
    </rect> 
    </property> 
    <layout class="QVBoxLayout" name="verticalLayout"> 
    <item> 
    <widget class="QLineEdit" name="lineEdit"/> 
    </item> 
    <item> 
    <widget class="QTableView" name="tableView_2"/> 
    </item> 
    <item> 
    <widget class="QTableView" name="tableView"/> 
    </item> 
    </layout> 
    </widget> 
</widget> 
<resources/> 
<connections> 
    <connection> 
    <sender>lineEdit</sender> 
    <signal>returnPressed()</signal> 
    <receiver>Dialog</receiver> 
    <slot>close()</slot> 
    <hints> 
    <hint type="sourcelabel"> 
    <x>200</x> 
    <y>14</y> 
    </hint> 
    <hint type="destinationlabel"> 
    <x>199</x> 
    <y>149</y> 
    </hint> 
    </hints> 
    </connection> 
</connections> 
</ui> 

Но эти QTableView виджеты не изменяемые. Я не нашел никакого свойства в Qt.

Так как я могу сделать эти QTableView виджетами по размеру или авто развернуть и договориться?

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

Образец кода был разработан в Qt4 Designer по адресу Ubuntu 14.04.

+0

@Chernobyl Я хочу изменить размер виджета мышью – Patrick

ответ

3

Перерыв текущего макета, выберите два виджетов, нажмите Layout Vertically in Splitter и, наконец, выберите форму и нажмите layout vertically. enter image description here

+0

Макет вертикально в сплиттере? – Patrick

+1

@Patrick Извините, но я не знаю python. В любом случае решение Златомира тоже хорошо. +1 для него. – Chernobyl

+0

@ Zlatomir Выполнено, как указано, но в предварительном просмотре на границах виджета QTableView не отображается символ изменения размера. – Patrick

1

Это потому, что у вас нет макета на вашем QDialog. Что вы сделали, так это то, что вы перетащили вертикальный макет поверх диалога, теперь диалог содержит макет, который находится absolute и не связан с диалогом. То, что вы хотите сделать, - переместить все виджеты с вертикальной компоновки поверх QSplitter, щелкнуть правой кнопкой мыши по QDialog и в пункте контекстного меню Lay out выбрать Lay Out Vertically или, альтернативно, нажать QDialog и нажать Ctrl + 2. Результат должен быть следующим:

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>Dialog</class> 
<widget class="QDialog" name="Dialog"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>405</width> 
    <height>305</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Dialog</string> 
    </property> 
    <layout class="QVBoxLayout" name="verticalLayout"> 
    <item> 
    <widget class="QSplitter" name="splitter"> 
    <property name="orientation"> 
     <enum>Qt::Vertical</enum> 
    </property> 
    <widget class="QLineEdit" name="lineEdit"/> 
    <widget class="QTableView" name="tableView_2"/> 
    <widget class="QTableView" name="tableView"/> 
    </widget> 
    </item> 
    </layout> 
</widget> 
<resources/> 
<connections/> 
</ui> 

enter image description here

Что я рекомендую читает Qt Layout Management Documentation для получения дополнительной информации по этой теме.

+0

@luliu Я пробовал ваш код, и он также не дает возможности изменять размеры виджетов, когда мышь находится над их границами. – Patrick

+0

@Patrick, чтобы вы могли изменить высоту каждого виджета, перетащив зону между виджетами? – Iuliu

+0

@Patrick, если да, см. Мои правки. – Iuliu