如何在删除其中一个窗口小部件后将QGridLayout设置在特定位置

时间:2014-02-05 04:34:11

标签: c++ qt 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后它都应该处于正确的位置。

enter image description here enter image description here

1 个答案:

答案 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 );

再次使用QHBoxLayoutQGridLayout(可能不再需要使用网格),您可能需要使用对齐来获得所需的结果。像这样的东西可能会起作用