首页 文章

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

提问于
浏览
1

我有一个类子类,从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 回答

  • 4

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

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

相关问题