从Qt中的QGridLayout中删除Widget?

时间:2013-03-23 16:11:14

标签: c++ qt

我对QGridLayout有一个非常基本的疑问。 要在QGridLayout中添加小部件,我们会将QWidget *row& column没有(其他一些args)。 现在,为了删除小部件,没有任何功能根据行&移除小部件。列号,例如:

int row, column;
gridObj->remove(row, column);

我认为QGridLayout必须维护一种QList来存储小部件&的引用。有职位。那么为什么没有按位置删除小部件的功能呢? 它只有一个删除函数,我们需要为其指定QWidget对象的引用。

如果这是一个限制,那么这个问题有解决办法吗? 自己维护一个QList是一个解决方案,但它非常繁琐。 谢谢

2 个答案:

答案 0 :(得分:2)

我可能会在这里弄错,但是从略读文档中,试试这个:

  1. 将QLayoutItem放在该位置( QGridLayout::itemAtPosition(行,列))。
  2. 使用QLayoutItem获取小部件指针( QLayoutItem::widget())。
  3. 使用小部件指针在QGridLayout中找到小部件的索引( QLayout::indexOf(widgetPointer))。
  4. 使用索引从布局中获取窗口小部件的所有权( QGridLayout::takeAt(索引))。
  5. 将所有内容包裹在便利功能中?
  6. 我总是无法在布局中重新排序窗口小部件,从布局中删除窗口小部件等等......通常,我只是想删除布局并重新添加窗口小部件。 =(

答案 1 :(得分:1)

要按布局位置删除QGridLayout中的窗口小部件,只需使用

即可
layout->removeWidget(layout->itemAtPosition(row, column)->widget());

但是,您必须注意以下内容:

  • 此代码假定实际上有一个项目 布局中指定的位置。如果不是,则itemAtPosition()将 返回null。因此,您需要确定位置,或明确检查。
  • 此代码将从布局中删除窗口小部件,但不删除它。 你必须将小部件放回不同的布局或给予 小部件你自己合理的几何如果不这样做,小部件就会保留 在当前位置可见。如果你想要小部件 破坏后,你必须明确删除它 从布局中删除。
  • 此代码仅适用于布局中的顶级窗口小部件 添加了addWidget()。它不适用于添加addLayout()的嵌套布局。 如果您还需要关心嵌套布局,请参阅 my answer about removing rows and columns from grid layouts