2013-07-30 6 views
6

Qt 5.1とQt Quick 2を使ってゲームを書きたいと思っています。新しい(より速い)グラフィックエンジンです。私は何時間もドキュメントを読んできましたが、C++コードで位置が決まる画面上のアイテムを移動したい場合は、どのクラスを使うのか分かりません。Qt Quick 2でどのクラスを使用するのはいつですか?

QGraphicsでは、QGraphicsSceneのインスタンスを作成してQGraphicsItemの任意の継承を追加してから、ウィジェットであるQGraphicsViewのインスタンスを作成し、すべてのアイテムとその変更を表示します。 QGraphicsItemを信号に接続して変更を行います。

私は最初、私は私がQGraphics、すなわちQDeclarativeEngine、QDeclarativeComponentとQDelcarativeViewに同等物を発見し、カスタムQML要素を作成する準備ができていたと思っのみ使用QMLとJavaScript、
    • official examplesを読むQtのクイック2では

      QPROPERTY

      • UPDATE:今すぐQDeclarative *がQt Quick 1であり、QQml *が同等のQt Quick 2プレフィックスであることがわかりました。
    • しかし、私はまたQQuickItem, QQuickWindow, QSGNode etc.を見つけました。
    多くのチュートリアルのドキュメントを読んだ後、私はまだ "デ​​フォルト"の解決策が何であるか分かりません。チュートリアルごとに異なるものが表示されます。私はすべての例とクラスに圧倒されています。

    • Qt Quick 2に基づいた基本的な例と、C++で書かれた通常のQObjectから送られてくる信号によってキャンバス上の画像が移動する場所を教えてください。
    • 私が言及したすべてのクラスを分類するのを手伝ってください。私はいつ使うのですか?
  • 答えて

    6

    私はあなたがさまざまなレベルでの事柄についての混乱を作っていると思うし、それがacuallyこの質問小さく質問に分割すべき「化合物」の質問になります...とにかく

    • QtQuick 2のコンテンツをホストできるQWindowが必要な場合は、QQuickViewまたはQQuickWindowが必要です(通常は、前者の方が利便性が高い、ドキュメント参照)。
    • QtQuick2はQGraphicsViewではありません。です。それはQtWidgetsでさえありません。そこにウィジェット関連のクラスやAPIを使用することはできません。
    • QML要素のプロパティをC++オブジェクトにバインドする最も簡単な方法は、そのオブジェクトをQMLエンジンに公開して通常のバインディングを実行することです。例えば

    class MyObject : public QObject { 
        Q_OBJECT 
        Q_PROPERTY(int horizontalPos READ horizontalPos NOTIFY horizontalPosChanged) 
    public: 
        int horizontalPos() const { return m_horizontalPos; } 
    signals: 
        void horizontalPosChanged(); 
        // etc. 
    } 
    

    その後、あなたはQMLエンジンにMyObjectにのインスタンスを公開することができます。

    MyObject obj; 
    QQuickView view; 
    // exposes the object under the "_myObject" name 
    view.engine()->context()->setContextProperty("_myObject", &obj); 
    

    アンダースコアは、この名前が来ているという事実を強調するためにいい感じですC++の世界から。

    は最後に、QMLで、あなただけのプロパティにバインドすることができます

    Rectangle { 
        x: _myObject.horizontalPos // voilà, they're bound together 
    } 
    
    +0

    私はQWindowが必要なのでしょうか?これは私が抱えている問題の一部です。 QGraphicsでは、レイアウトのどこかにQGraphicViewを追加しました。 – problemofficer

    +0

    'QQuickView'は' QWidget'ではないので、同じことを直接行うことはできません。 'QWidget :: createWindowContainer'を使ってそのようなビューをホストすることができます。 – peppe

    2

    あなたが動的にC++側からカスタムQMLのコンポーネントをインスタンス化し、まだC++側から、プロパティを変更することができます。

    スプライトや文字の位置が画面に表示されているC++のリスト/モデル/複数のqobjectsで作業し、このリストをqml側にバインドすることもできます。

    ます。また、(ここで提案されているように:http://qt-project.org/forums/viewthread/29407/)その子をレイアウトするC++からいくつかのQQuickItemを書くことができ

    -

    そして、ここではPeppeのの答え/ QtQuick2 & C++をミックスする方法を詳述を完了したいくつかのリンクです:

    (Qt5ドキュメントはよくGoogleのインデックスされていない)はQtクイック2/C++統合のための

    ドキュメントのページ:

    そうでない場合、あなただけのQtCreatorからQtQuick2アプリケーションのスケルトンを使用することができます...(あなたがQtWidgetアプリケーションでQtQuick2を埋め込みたい場合は、それが唯一だのQWidget :: createWindowContainerを説明するブログ記事を):

    関連する問題