1

QGridLayout用来加一QPushButton和一QTextEdit。但是每当我隐藏和移除时,QTextEdit widget就会QPushButton出现在QTextEdit.

最初QPushButton是 in position 可以说是 in (0,0)position 。然后在移除时即将到达位置,即在位置。QTextEdit(100,0)QTextEdit QPushButtonQTextEdit(100,0)

layout->addWidget(button1,0,0,1,1, Qt::AlignCenter);
layout->addWidget(text1,0,1,1,1); 

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

layout->removeWidget(text1);

所以我认为我必须设置的位置,QGridLayout以便每次移除后widget它都应该处于正确的位置。

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

2

根据您的屏幕截图,当您删除QTextWidget. 您可以尝试将 的可见性设置QTextWidget为 false 而不是删除它。

text1->setVisible( false );

尽管基于QGridLayout 文档,这可能具有相同的结果。

或者,当您将其QTextEdit替换为QSpacerItem时,该列不会被完全删除。

如果这仍然不起作用,我接下来会尝试将您的对齐更改QPushButtonQt::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 );

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

于 2014-02-05T04:58:00.667 回答