2017-11-14 20 views
-1

私はQtとQmlが新しく、どのように連携しているのか把握しようとしています。
C++の使用場所とJavaScriptの使用場所が混乱しています。 QMLオブジェクト(フォーム、入力、ドロップダウンなど)が2つあるとしましょう。今や明らかにこれらのコンポーネントにはいくつかのロジックコードがあります。私はこのロジックコードをJavaScriptまたはC++で書くべきですか?私の入力にプロパティとシグナルのグループがあるとしましょう。これらはどこでどのようにコード化すべきですか? JavaScriptで書く必要がある場合は、C++をどのように使用するのですか。 C++とJavaScriptがどのように接続されていますか?私はかなり混乱している!ドキュメントも私を助けません。 ありがとうQt Qml Javascript - どこで使う?

+1

qmlで処理できない場合は、CML – eyllanesc

+0

QMLを使用してください。ほとんどの場合、自立しているので、@eyllanescは既に欠けている必要があるまでC++を使用しないでください機能性。 QMLを拡張する方法としてC++を利用する。 [こちら](https://qmlbook.github.io/)は、QMLを学ぶのに適しています。 – folibis

+0

単純なユースケースは、C++側を「バックエンド」およびQMLフロントエンドコードと見なすことです。ですから、QML/JSとのC++やUIのやり取りのデータベース接続や作業を簡単に行うことができます。 – xander

答えて

1

QML言語はインターフェイスを記述するために使用されるように発明されました。これはデザイナーにとって理解しやすいことを意味します。

これは、プログラムでは、一般にすべてのロジックがC++で実装され、UIがQMLで実装されることを意味します。 C++とQMLをリンクするには、QMLにC++コードを公開する必要があります。それを行うには多くの方法があります。 たとえば、CMLクラスをQMLで利用できるようにするには(http://doc.qt.io/qt-5/qtqml-cppintegration-topic.htmlを参照)、シングルトンのインスタンスをQMLで利用できるようにするか、QObjectポインタをQML環境に挿入します。これらのすべては、Qtメタオブジェクトシステム(http://doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html)を大量に使用しています。

// in C++ 
class MyClass 
{ 
    Q_OBJECT 
public slots: 
    int doSomething(); 
    ... 
}; 

int main() 
{ 
... 
    engine->rootContext()->setContextProperty("foo", new MyClass()); 
... 
} 

// in QML 

function foobar() { 
    var anInt = foo.doSomething(); 
} 

あなたはまた、これまで、C++を使用してJavaScriptですべてを実装せずに完全なプログラムを書くことができますjavascriptを書き込むことができるようにQML。 しかし、これは一般的には悪い考えです。特に演奏が必要な場合にはそうです。

QMLを拡張するために、C++はここにはありません。しかしQMLは、C++オブジェクトへのシンプルなインターフェイスを提供するためにここにあり、開発者やデザイナーはC++をタイプ/学習することなく派手なUIを作成することができます。

QMLを書くときの私の個人的なルールは、できるだけ早くC++に行くことです。 QMLで簡単な関数を書くことはできますが、基礎となるQMLエンジンとJSエンジンの最適化のフルパワーを活用するには、それらを短く簡単に保つ必要があります。 QMLを高速に保つのは難しいですが、QMLを使うときに何を考えたらいいのか、Qtドキュメントの全ページがあります(http://doc.qt.io/qt-5/qtquick-performance.html)。

関連する問題