я использую QGridLayout
добавить один QPushButton
и один QTextEdit
, но всякий раз, когда я прячусь и удаляю QTextEdit widget
затем QPushButton
идет на позиции QTextEdit
,
Первоначально QPushButton
в положении, скажем, (0,0)
а также QTextEdit
находится в положении (100,0)
, Потом на удаление QTextEdit QPushButton
идет на QTextEdit
положение, т.е. в положении (100,0)
,
layout->addWidget(button1,0,0,1,1, Qt::AlignCenter);
layout->addWidget(text1,0,1,1,1);
При нажатии клавиши удаления я удаляю QTextWidget:
layout->removeWidget(text1);
Так что я думаю, что должен установить позицию QGridLayout
так что каждый раз после удаления widget
он должен быть в правильном положении.
Исходя из вашего скриншота, похоже, что столбец полностью удаляется при удалении QTextWidget
, Вы можете попробовать поэкспериментировать с настройкой видимости QTextWidget
ложно, а не удаляя его.
text1->setVisible( false );
Хотя на основе QGridLayout doc это может иметь тот же результат.
Или когда вы удаляете QTextEdit
замените его QSpacerItem поэтому столбец не полностью удалить.
Если это все еще не работает, я бы попробовал изменить выравнивание QPushButton
в Qt::AlignLeft
,
layout->addWidget(button1,0,0,1,1, Qt::AlignLeft);
Если вас это не устраивает, я бы попробовал использовать QHBoxLayout а не QGridLayout
расположить предметы по горизонтали. Или вы всегда можете использовать QHBoxLayout
в первой строке / столбце QGridLayout
это в конечном итоге зависит от ваших будущих вариантов использования.
Например:
QHBoxLayout* hLayout = new QHBoxLayout();
hLayout->addWidget( button1, 0, Qt::AlignLeft );
hLayout->addWidget( text1, 0, Qt::AlignLeft );
qGridLayout->addLayout ( hLayout, 0, 0, Qt::AlignLeft );
Опять с QHBoxLayout
а также QGridLayout
(возможно, вам больше не нужно использовать сетку) вам, возможно, придется поиграть с выравниванием, чтобы получить желаемые результаты. Нечто подобное может сработать
Других решений пока нет …