【问题标题】:QObject selfdestruction aware containerQObject 自毁感知容器
【发布时间】:2015-03-17 12:10:01
【问题描述】:

是否有一个 Qt 容器,它知道 QObject 的被破坏信号并在元素被破坏时移除元素?

即像这样:

QObject *obj1 = new MyObject();
QObject *obj2 = new MyObject();
QObjectContainer c;
c.add(obj1);
c.add(obj2);
qDebug() << c.size(); // Prints 2
delete obj1;
qDebug() << c.size(); // Prints 1

【问题讨论】:

  • 等等,你的想法有缺陷。如果你删除一个对象,你将如何在数组中找到它的索引?您每次都需要执行完整的搜索。想一想,它不能以任何合理的方式实现。即使您的数组捕获到destroyed() 信号,它也只会获取指针的地址,而不是它在数组中的索引。您需要按值搜索它。表现会很糟糕。
  • 将您的对象添加为虚拟父 QObject 的子对象 ;-)

标签: qt containers qt5 qobject self-destruction


【解决方案1】:

您可以通过在container 派生类中捕获信号destroyed() 来自己完成。

附:没有 Qt 类这样做,AFAIK。

【讨论】:

    【解决方案2】:

    当指向的对象被删除时,QPointer 会自动清除

    【讨论】:

    • 好吧,如果指向的包含对象被删除,那么有一个列表将删除 QPointer。
    • @ManuelSchneid3r 你可以在迭代过程中做一些簿记,虽然索引列表可能不是一个好主意,而是一个类似集合的容器会更好。
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2023-04-04
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多