如何销毁QML中的上下文指针?

问题描述:

我动态实例化的对象在main(),并将其设置在诸如上下文:如何销毁QML中的上下文指针?

Controller *controller = new Controller(); 
engine.rootContext()->setContextProperty("controller", controller); 

至此我没有访问该指针在C++只是在QML后。在应用程序结束时,我想释放指针(更具体地在Component.onDestruction)。我无法想出如何在QML中做到这一点。

  1. 我试图controller.destroy()但它返回:Error: Invalid attempt to destroy() an indestructible object

  2. 也试过controller.deleteLater()但它给了我:TypeError: Property 'deleteLater' of object Controller(0x4914028) is not a function

  3. delete controller什么都不做。

我搜查了文档,但找不到我在找的东西。任何人有任何想法?谢谢!

+0

请阅读[此](http://doc.qt.io/qt-5/qtqml-cppintegration-data.html#data-ownership)和[此](HTTPS://wiki.qt .io/Shared_Pointers_and_QML_Ownership)链接。 – folibis

您可以尝试使用智能指针,以便在超出范围时将其销毁。

//main.cpp 

QSharedPointer<Controller> controller = 
    QSharedPointer<Controller>(new Controller(), &QObject::deleteLater); 
engine.rootContext()->setContextProperty("controller", controller);