我有一个类子类,从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 回答
原因是,当发出QObject :: destroyed()时,派生类Subclass已经被销毁 . the C++ order of destruction暗示了这一点 . 此外,this question处理类似的问题 .
要解决这个问题,您可以使用C风格的指针转换(这是不受欢迎的),或者重写代码以改为使用QObject .