为什么qobject_cast和dynamic_cast在连接到QWidget :: destroy的插槽中失败?

时间:2014-07-03 05:10:30

标签: qt casting qobject

我有一个类子类,来自QObject的子类。我想知道什么时候删除项目,所以我将这个插槽连接到Subclass继承的QWidget :: destroyed()信号。但是当我尝试使用qobject_cast转换参数时,我得到零结果。同样的结果来自C ++的dynamic_cast。为什么呢?

void MyClass::mySlot( QObject * item )
{
    qobject_cast<Subclass*>(item); // returns zero, even though item is a Subclass*
}

1 个答案:

答案 0 :(得分:4)

原因是,当发出QObject :: destroyed()时,派生类Subclass已经被销毁。 the C++ order of destruction暗示了这一点。此外,this question处理类似的问题。

为了解决这个问题,您可以使用C风格的指针转换(这是不受欢迎的),或者重写代码以改为使用QObject。