#c #qt #user-interface
#c #qt #пользовательский интерфейс
Вопрос:
Я новичок в qt, и теперь мое окно выглядит так:
*---------* *---------* *---------* *---------*
|ListView1| |ListView2| |ListView3| |ListView4|
| | | | | | | |
*---------* *---------* *---------* *---------*
*---------------------------------------------*
| |
| ListView5 |
| |
*---------------------------------------------*
*---------------------------------------------*
| GridLayout2 |
| |
*---------------------------------------------*
Проблема в том, что вторая строка (ListView5) выше первой и третьей строк, в то время как я хочу, чтобы первая строка была выше третьей строки, которая должна быть выше второй строки. Есть ли способ это сделать? Или я должен использовать что-то еще вместо gridlayout? Спасибо.
Комментарии:
1. Что вы подразумеваете под более высоким ? Вы имеете в виду, что его »
height
больше»? Или вы имеете в виду, что он должен быть «размещен выше»?2. Да, я имею в виду «высота больше». Извините за двусмысленность.
3. В общем,
QGridLayout
размер строк и столбцов будет зависеть от нескольких факторов, включая подсказки / политики размера виджетов и т. Д. Если вы хотите настроить это, вы можете попробовать установить коэффициент растяжения каждой строки. Но, не зная ваших точных требований, трудно сказать больше, чем это.
Ответ №1:
Я рекомендую вам прочитать документацию здесь, для получения информации о том, как виджетам присваиваются их размеры при добавлении в макет:
- Всем виджетам изначально будет выделено определенное количество места в соответствии с их
QWidget::sizePolicy()
иQWidget::sizeHint()
.- Если для любого из виджетов установлены коэффициенты растяжения со значением, большим нуля, то им выделяется пространство пропорционально их коэффициенту растяжения.
- Если для любого из виджетов установлены коэффициенты растяжения, равные нулю, они получат больше места только в том случае, если другим виджетам это место не нужно. Из них пространство сначала выделяется для виджетов с
Expanding
политикой размера.- Всем виджетам, которым выделено меньше места, чем их минимальный размер (или подсказка о минимальном размере, если минимальный размер не указан), выделяется этот минимальный размер, который им требуется. (Виджеты не обязательно должны иметь минимальный размер или подсказку о минимальном размере, и в этом случае фактор растяжения является их определяющим фактором.)
- Всем виджетам, которым выделено больше места, чем их максимальный размер, выделяется пространство максимального размера, которое им требуется. (Виджеты не обязательно должны иметь максимальный размер, и в этом случае фактор растяжения является их определяющим фактором.)
Предполагая, что вы не изменили значение sizePolicy
для QListView
s, тогда все они имеют значение по умолчанию sizePolicy
Expanding
. Это означает, что вам просто нужно установить подходящие коэффициенты растяжения для строк в QGridLayout
.
Если вы используете Qt designer, просто нажмите на QGridLayout
(или виджет, который имеет QGridLayout
), и в редакторе свойств установите layoutRowStretch
что-то вроде 3,1,2
.
3,1,2
установит, что третья строка будет заполнена вдвое больше высоты пустого пространства, занимаемого второй строкой, в то время как первая строка будет заполнена в три раза больше высоты пустого пространства, занимаемого второй строкой.
Если вы хотите сделать это без конструктора, вы можете использовать setRowStretch
что-то вроде этого:
gridLayout.setRowStretch(0, 3);
gridLayout.setRowStretch(1, 1);
gridLayout.setRowStretch(2, 2);