Как установить QGridLayout в определенной позиции после удаления одного из его виджета

я использую 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 он должен быть в правильном положении.

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

1

Решение

Исходя из вашего скриншота, похоже, что столбец полностью удаляется при удалении 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 (возможно, вам больше не нужно использовать сетку) вам, возможно, придется поиграть с выравниванием, чтобы получить желаемые результаты. Нечто подобное может сработать

2

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

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

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