QGridLayout: изменение высоты строки

#c #qt #user-interface

#c #qt #пользовательский интерфейс

Вопрос:

Я новичок в qt, и теперь мое окно выглядит так:

 *---------* *---------* *---------* *---------* 
|ListView1| |ListView2| |ListView3| |ListView4| 
|         | |         | |         | |         |
*---------* *---------* *---------* *---------* 
*---------------------------------------------*
|                                             |
|                  ListView5                  |
|                                             |
*---------------------------------------------*    
*---------------------------------------------*
|                  GridLayout2                |
|                                             |
*---------------------------------------------*
  

Проблема в том, что вторая строка (ListView5) выше первой и третьей строк, в то время как я хочу, чтобы первая строка была выше третьей строки, которая должна быть выше второй строки. Есть ли способ это сделать? Или я должен использовать что-то еще вместо gridlayout? Спасибо.

Комментарии:

1. Что вы подразумеваете под более высоким ? Вы имеете в виду, что его » height больше»? Или вы имеете в виду, что он должен быть «размещен выше»?

2. Да, я имею в виду «высота больше». Извините за двусмысленность.

3. В общем, QGridLayout размер строк и столбцов будет зависеть от нескольких факторов, включая подсказки / политики размера виджетов и т. Д. Если вы хотите настроить это, вы можете попробовать установить коэффициент растяжения каждой строки. Но, не зная ваших точных требований, трудно сказать больше, чем это.

Ответ №1:

Я рекомендую вам прочитать документацию здесь, для получения информации о том, как виджетам присваиваются их размеры при добавлении в макет:

  1. Всем виджетам изначально будет выделено определенное количество места в соответствии с их QWidget::sizePolicy() и QWidget::sizeHint() .
  2. Если для любого из виджетов установлены коэффициенты растяжения со значением, большим нуля, то им выделяется пространство пропорционально их коэффициенту растяжения.
  3. Если для любого из виджетов установлены коэффициенты растяжения, равные нулю, они получат больше места только в том случае, если другим виджетам это место не нужно. Из них пространство сначала выделяется для виджетов с Expanding политикой размера.
  4. Всем виджетам, которым выделено меньше места, чем их минимальный размер (или подсказка о минимальном размере, если минимальный размер не указан), выделяется этот минимальный размер, который им требуется. (Виджеты не обязательно должны иметь минимальный размер или подсказку о минимальном размере, и в этом случае фактор растяжения является их определяющим фактором.)
  5. Всем виджетам, которым выделено больше места, чем их максимальный размер, выделяется пространство максимального размера, которое им требуется. (Виджеты не обязательно должны иметь максимальный размер, и в этом случае фактор растяжения является их определяющим фактором.)

Предполагая, что вы не изменили значение 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);