2016-07-26 8 views
3

は私がメインで、動的オブジェクトをインスタンス化()などのコンテキストでそれを設定します。私はQMLでC++のポインタへのアクセスを持っていないこの時点の後QMLでコンテキストポインタを破壊するには?

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

。アプリケーションの最後に、ポインタを解放したい(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

答えて

0

スマートポインタを使用して、スコープから外れると破棄されるようにすることができます。

//main.cpp 

QSharedPointer<Controller> controller = 
    QSharedPointer<Controller>(new Controller(), &QObject::deleteLater); 
engine.rootContext()->setContextProperty("controller", controller); 
関連する問題