QFormLayout расширяет столбец QGridLayout

Я создаю QFormLayout с некоторыми элементами, как это:

QFormLayout *tableLayout = new QFormLayout();
QLineEdit *line1 = new QLineEdit();
QLineEdit *line2 = new QLineEdit();

tableLayout->addRow(tr("LineText1 "), line1);
tableLayout->addRow(tr("LineText2 "), line2);

После этого я пытаюсь добавить этот макет в QGridLayout следующим образом:

QGridLayout *layout = new QGridLayout();
QPushButton *btn1 = new QPushButton();
QPushButton *btn2 = new QPushButton();
layout->addWidget(btn, 1, 1, 3, 3);
layout->addWidget(btn2, 1, 4);
layout->addLayout(tableLayout, 2, 4);

После того, как я добавил tableLayout, btn1 имеет ширину как 1 столбец, а tableLayout имеет ширину как 3 столбца.

Я уже пытался поместить QFormLayout в собственный виджет и добавить виджет в QGridLayout. Но это ничего не изменило. Я делаю это следующим образом:

QFormLayout *tableLayout = new QFormLayout();
QLineEdit *line1 = new QLineEdit();
QLineEdit *line2 = new QLineEdit();

tableLayout->addRow(tr("LineText1 "), line1);
tableLayout->addRow(tr("LineText2 "), line2);

QWidget *widget = new QWidget();
widget->setLayout(tableLayout);QGridLayout *layout = new QGridLayout();
QPushButton *btn1 = new QPushButton();
btn1->setText("btn1");
QPushButton *btn2 = new QPushButton();
btn2->setText("btn2");
layout->addWidget(btn1, 1, 1, 3, 3);
layout->addWidget(btn2, 1, 4);
layout->addWidget(widget, 2, 4);

В чем причина этой странной ситуации? И как это решить?

Вот изображение результата:введите описание изображения здесь

И вот, что я хочу иметь:введите описание изображения здесь

2

Решение

Чтобы построить дизайн, который вы хотите, первым делом необходимо установить положение элементов, помните, что положение строк или столбцов начинается с 0, а не с 1, как вы. Вторая часть состоит в том, чтобы установить политики размера, некоторые виджеты уже имеют некоторую установленную политику, такую ​​как QPushButton, которая растягивается по горизонтали, но не по вертикали, поэтому даже если rowSpan большой, это не изменит высоту кнопки, поэтому мы должны изменить это поведение и, наконец, растянуть.

#include <QApplication>
#include <QFormLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QSizePolicy>
#include <QWidget>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;

QGridLayout *layout = new QGridLayout(&w);

QPushButton *btn1 = new QPushButton("Btn1");
btn1->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);

QPushButton *btn2 = new QPushButton("Btn2");
btn2->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);

QFormLayout *tableLayout = new QFormLayout();
QLineEdit *line1 = new QLineEdit();
QLineEdit *line2 = new QLineEdit();
tableLayout->addRow("LineText1 ", line1);
tableLayout->addRow("LineText2 ", line2);

layout->addWidget(btn1, 0, 0, 3, 3);
layout->addWidget(btn2, 0, 3);
layout->addLayout(tableLayout, 1, 3);

// column 0 x3
layout->setColumnStretch(0, 3);
// column 3 x1
layout->setColumnStretch(3, 1);

w.resize(640, 480);
w.show();

return a.exec();
}

введите описание изображения здесь

Обратите внимание, что QFormLayout будет делать виджеты всегда сверху, поэтому он не обязательно будет занимать высоту пространства, предлагаемого QGridLayout.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]