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