#qt #qwidget
#qt #qwidget
Вопрос:
У меня есть кнопки
QTableWidget
, QTextEdit
и «Отмена» и «Ок».
Я хочу, чтобы эти виджеты оставались в одном и том же положении относительно друг друга, а QTableWidget
расширяться при расширении диалогового окна или изменении размера…
Как я могу это сделать?
Ответ №1:
Вам нужно изучить систему макетов Qt — использование layouts автоматически изменит размер ваших объектов на основе размера их родительского элемента.
Комбинация использования QWidget::setSizePolicy()
и QBoxLayout::setStretch()
(или, что более вероятно QBoxLayout::insertWidget(..., int stretch = 0, ...)
) позволит вам достичь поведения, на которое вы ссылаетесь, когда только определенные объекты расширяются, чтобы заполнить доступное пространство, в то время как другие остаются постоянного размера.
Обращение к изображению, которое вы привели выше в качестве примера:
Помимо перетаскивания объектов в форму, для достижения этого решения у меня есть:
- Установите для
sizePolicy
изtextEdit
по вертикали значениеFixed
. - Задайте высоту в
textEdit
‘sminimumSize
дляsizePolicy
использования. - Установите
layoutStretch
вcentralWidget
значение1,0
, т.е. выделите минимально возможное пространство для элементов, содержащихся вhorizontalLayout
, и предоставьте все оставшееся пространствоtableWidget
.
Комментарии:
1. QGridLayout *layout=new QGridLayout(); пользовательский интерфейс-> tableWidget->setSizePolicy(QSizePolicy::Expanding); макет-> addWidget (пользовательский интерфейс-> tableWidget,0,0,-1,-1, Qt::AlignVCenter); макет-> addWidget (пользовательский интерфейс-> textEdit_2,1,0,1,2, Qt::AlignLeft); layout-> addWidget (ui-> отмена, 1, 1); layout-> addWidget (ui->ok, 1,2); this-> setLayout (макет); но это не создает того, что я хочу. каждый из виджетов не заполняет доступное пространство. для каждого виджета создается только небольшое окно. Как мне заполнить виджет в каждой ячейке сетки? и QWidget setSizePolicy () выдал мне ошибку о его закрытии и не может быть использован..
2. У вас правильная идея, но если вы используете Qt Designer для размещения своих виджетов, вы можете добавить макеты и указать коэффициенты растяжения и т.д. , А также задать политики размеров (с помощью редактора свойств), Не выходя из Designer. Другим преимуществом этого является то, что вы сможете увидеть эффект от всех вносимых вами изменений без необходимости создавать свое приложение.
3. итак, я попробовал с настройками макета в конструкторе, и у меня есть мои виджеты в виде сетки, но размеры ячеек не меняются. Если вы видите мою картинку, я хотел, чтобы мой TextEdit был узким и длинным, а таблица — большой… сетка не позволяет мне этого сделать … idk почему. как бы мне настроить размеры?
4. основываясь на вашем изображении выше, я бы не рекомендовал использовать
QGridLayout
, а вместо этого вложил вашQTableWidget
вместе сQHBoxLayout
, содержащим другие ваши виджеты внутриQVBoxLayout
. Смотрите обновление к моему ответу выше.5. итак, я попробовал то, что вы предложили, TextEdit, виджеты и кнопки остаются в нужном месте и имеют правильные размеры. Однако они остаются статичными, когда я увеличиваю диалоговое окно … и tablewidget больше не будет автоматически создавать полосы прокрутки, когда я сворачиваю окно до размера, меньшего исходного размера tablewidget … (это работало, когда я использовал GridLayout)