我正在使用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
后它都应该处于正确的位置。
答案 0 :(得分:2)
根据您的屏幕截图,当您删除QTextWidget
时,该列似乎已完全删除。您可以尝试尝试将QTextWidget
的可见性设置为false,而不是将其删除。
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
(可能不再需要使用网格),您可能需要使用对齐来获得所需的结果。像这样的东西可能会起作用