C++ 如何在移除QGridLayout的一个小部件后将其设置在特定位置

C++ 如何在移除QGridLayout的一个小部件后将其设置在特定位置,c++,qt,qgridlayout,C++,Qt,Qgridlayout,我正在使用QGridLayout添加一个QPushButton和一个QTextEdit。但是每当我隐藏和删除QTextEdit小部件时,QPushButton就会出现在QTextEdit的位置上 最初,QPushButton处于位置,比如说(0,0)和QTextEdit处于位置(100,0)。然后,在移除QTextEdit时,QPushButton会出现在QTextEdit位置,即在(100,0)位置 按delete键时,我正在删除QTextWidget: layout->removeWi

我正在使用
QGridLayout
添加一个
QPushButton
和一个
QTextEdit
。但是每当我隐藏和删除
QTextEdit小部件时,
QPushButton
就会出现在
QTextEdit
的位置上

最初,
QPushButton
处于位置,比如说
(0,0)
QTextEdit
处于位置
(100,0)
。然后,在移除
QTextEdit时,QPushButton
会出现在
QTextEdit
位置,即在
(100,0)
位置

按delete键时,我正在删除QTextWidget:

layout->removeWidget(text1);
因此,我认为我必须设置
QGridLayout
的位置,以便每次移除
widget
后,它都应该处于正确的位置


根据您的屏幕截图,当您删除
QTextWidget
时,该列似乎已被完全删除。您可以尝试将
QTextWidget
的可见性设置为false,而不是将其删除

text1->setVisible( false );
尽管基于此,但可能会产生相同的结果

或者,当您删除
QTextEdit
时,将其替换为,以使列不会完全删除

如果这仍然不起作用,我接下来会尝试将
QPushButton
的对齐方式更改为
Qt::AlignLeft

layout->addWidget(button1,0,0,1,1, Qt::AlignLeft);
如果您对此不满意,我会尝试使用a而不是
QGridLayout
水平布局项目。或者您可以始终在
QGridLayout
的第一行/列中使用
QHBoxLayout
,这最终取决于您未来的用例

例如:

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
(可能不再需要使用网格),您可能需要使用对齐来获得所需的结果。类似的方法可能会奏效

如果可以发布一个屏幕截图,这可能有助于更清楚地看到问题。@Rupesh根据您的屏幕截图更新了我的答案,希望这有助于为您指明正确的方向。
QHBoxLayout* hLayout = new QHBoxLayout();
hLayout->addWidget( button1, 0, Qt::AlignLeft );
hLayout->addWidget( text1, 0, Qt::AlignLeft );
qGridLayout->addLayout ( hLayout, 0, 0, Qt::AlignLeft );