2017-01-27 5 views
0

私たちのチームは、C++、QML、およびJSを利用するQtアプリケーションを開発しています。ファイル名を表す非言語固有の文字列とエラーコードを表すintを公開する最良の方法は何ですか?すべての言語で簡単に使用できるようにするにはどうすればよいですか?グローバル文字列とintをC++、QML、およびJSに公開する方法

+0

http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html – AlexanderVX

答えて

1

QObjectのプロパティとしてこれらの文字列とintを実装し、main.cppにそのオブジェクトのインスタンスを作成し、それをシングルトンとして登録するのが最も効率的でクリーンなソリューションです。

// before main() 
YourType data; 
static QObject * getData(QQmlEngine * e, QJSEngine *) { 
    e->setObjectOwnership(&data, QQmlEngine::CppOwnership); // just in case 
    return &data; 
} 


// in main() 
qmlRegisterSingletonType<YourType>("Core", 1, 0, "Data", getData); 
QQmlApplicationEngine engine; 
//... 

そして今、あなたはC++のグローバルdataを持っている、とQMLのグローバルData。最初のケースでは、dataをにアクセスする必要があるソースとして宣言する必要があります.2番目のケースでは、Dataとそのプロパティにアクセスするには、import Core 1.0にする必要があります。

+0

シングルトン作成関数は、各呼び出しで新しいオブジェクトを作成する必要があります。 オブジェクトは、エンジンによって管理されるエンジンごとのシングルトンおよびライフタイムです。 –

+0

@KevinKrammer - ドキュメントの例では、エンジンパラメータはまったく使用されません。それはエンジンの親和性の設定があるかのようには思われません。これはうまくいくようですが、私は個人的にはマルチエンジンのシナリオでそれを使用していません。このようにして、C++とQMLの両方でグローバルにすることができます。 – dtech

+0

"注:シングルトンタイプのプロバイダから返されたQObjectシングルトンタイプのインスタンスは、明示的なQQmlEngine :: CppOwnershipフラグが設定されていない限り、QMLエンジンが所有します。 http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType-1 –

関連する問題