从 Qt 中的 QGridLayout 中删除小部件?

Coo*_*der 5 c++ qt

我有一个非常基本的疑问QGridLayout。为了在QGridLayout我们提供的小部件中添加小部件QWidget *,应该将其row与 & columnno(还有其他一些参数)一起添加。现在要删除小部件,没有根据行和列号删除小部件的功能,即如下所示:

int row, column;
gridObj->remove(row, column);
Run Code Online (Sandbox Code Playgroud)

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

如果这是某种限制,那么是否有解决此问题的方法?自己维护一个 QList 是一个解决方案,但它非常乏味。谢谢你

Jam*_*rey 5

我可能在这里弄错了,但是通过浏览文档,尝试以下操作:

  1. 获取位置处的 QLayoutItem ( QGridLayout::itemAtPosition (row, column) )。
  2. 使用 QLayoutItem 获取小部件指针(QLayoutItem::widget ())。
  3. 使用小部件指针在 QGridLayout 中查找小部件的索引(QLayout::indexOf (widgetPointer))。
  4. 使用索引从布局中获取小部件的所有权(QGridLayout::takeAt (index))。
  5. 将所有内容封装在一个方便的函数中?

我总是在重新排序布局中的小部件、从布局中删除小部件等方面遇到麻烦...通常,我只是删除布局并重新添加小部件。=(