QT 杂项笔记qobject_cast

1、使用qobject_cast进行安全类型转换

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QObject *btn = new QPushButton;
    qDebug() << btn->metaObject()->className(); //查看类名

    //使用qobject进行安全类型转换,转换目标为QPushButton*类型,当btn为QPushButton类型及其子类时,才能转换成功,成功后pushBtn将指向btn
    QPushButton *pushBtn = qobject_cast(btn);
    qDebug() << pushBtn->metaObject()->className();
}

        `qobject_cast`是Qt提供的一个用于执行对象间安全的动态转换的宏。类似于C++中的`dynamic_cast`,但在使用Qt的多态类时更安全,特别是在多线程环境下。它是Qt中处理对象类型转换的推荐方式。

        `qobject_cast(btn)`:这部分代码实际上进行了类型转换,将`btn`对象转换为`QPushButton*`类型的指针。如果`btn`对象确实是`QPushButton`或其子类的实例,那么转换将成功,`pushBtn`将指向相应的`QPushButton`对象。否则,`pushBtn`将被赋值为`nullptr`,表示转换失败。

        总结:代码的作用是将`btn`对象转换为`QPushButton*`类型的指针,并将结果保存在名为`pushBtn`的变量中。如果转换成功,`pushBtn`将指向`btn`对应的`QPushButton`对象;如果转换失败,`pushBtn`将为`nullptr`。这样,我们可以通过检查`pushBtn`是否为`nullptr`来判断转换是否成功,从而安全地使用转换后的对象。

你可能感兴趣的:(qt,笔记,java)