2014-01-22 23 views
1

我在main.cpp中註冊的C++類(CLASS_NAME)像這樣(main.cpp中例如):選自C訪問的註冊類型實例++

#include "class_header.hpp" 
#include <QtQuick/QQuickView> 
#include <QGuiApplication> 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    qmlRegisterType<class_name>("ClassInstance", 1, 0, "ClassInstance"); 

    QQuickView view; 
    view.setResizeMode(QQuickView::SizeRootObjectToView); 
    view.setSource(QUrl("qml/main.qml")); 
    view.show(); 
    return app.exec(); 
} 

我已判定登記這個類創建該對象的一個​​實例,其中我只需要一個實例。 QML方面可以很好地訪問這個實例。我如何從C++端訪問同一個實例,例如,在上面顯示的main.cpp中?

在此先感謝!

回答

3

qmlRegisterType不會創建實例。它使用qml引擎註冊類型ClassInstance,以便您可以在qml中創建ClassInstance的實例。當你說你可以在qml方面訪問這個實例時,你實際上是在qml中創建一個新實例,並且它不能從C++訪問。

如果您的意圖是創建一個可以從qml和C++訪問的實例,那麼您需要的是上下文屬性。

ClassInstance obj; 
view.rootContext()->setContextProperty("myInstance", &obj); 

現在,您可以像在qml中使用myInstance和在C++代碼中使用obj一樣訪問同一個實例。文檔here

+0

感謝回覆lijo,我在想這可能是這種情況。我會放棄它。 – DaveyLaser

+0

工程就像一個魅力,再次感謝。 – DaveyLaser