2016-10-10 4 views
-1

QMLでHello Worldアプリケーションを作成しました。今、私はC++からテキストを "Hello World"から "Goodbye World"に変更する方法を学びたいと思っています。QML C++ Goodbye World

QMLはそうのようになります。

import QtQuick 2.6 

Rectangle { 
    property alias mouseArea: mouseArea 

    width: 360 
    height: 360 

    MouseArea { 
     id: mouseArea 
     anchors.fill: parent 
    } 

    Text { 
     id: helloText 
     anchors.centerIn: parent 
     text: "Hello World" 
    } 
} 

私は

https://wiki.qt.io/Introduction_to_Qt_Quick#Integration_with_C.2B.2B_applications

しかし、運に従うことをしようとしました。コードは不完全なようです。例えば、それはそうのような楕円形で情報をオフに残し:

QDeclarativeContext *context = …; 

そして、私はそれがなかった場合でも、QDeclarativeContextのヘッダーを見つけることができません。私はドキュメンテーションが古いと思うが、わからない。

とにかく、C++プログラムの中からテキストを "Hello World"から "Goodbye World"に変更できる簡単な例を見てみたいと思います。

答えて

2

このコードは、古いQtQuick1 API用で、QGraphicsSceneに基づいており、時代遅れであり、廃止され、IIRCはQtから削除されました。

私はC++のQMLを使用しないことをお勧めします。私はさらに進んでアンチパターンと呼んでいますが、99.9999%のケースではより良い解決策があります。 C++とQMLの間のやりとりは、明確に定義されたAPIに保つ必要があります。

つまり、オブジェクトを見つけてそのプロパティを操作することは可能です。 QQmlApplicationEngine::rootObjects()を使用してルートオブジェクトにアクセスすることができます。findChild()objectNameをQML側に指定したオブジェクトはQMetaObject:invokeMethod()(QML関数でも機能します)を使用して、qobject_castを使用してプロパティとその他のものを設定します。

これらの技術はすべてcovered in the documentationです。

+0

「Q ++ with C++との混乱に対してお勧めします」というご意見で混乱します。 C++からのUI表示を変更しないことをお勧めしますか? 「混じり合う」という言葉は私には不明です。 – Mitch

+0

@Mitch - 「オブジェクトを見つけてそれにランダムなことをする」という意味です.2つのレイヤー間の相互作用は、信号、スロット、およびプロパティに限定する必要があります。うまく設計されたAPIでは、C++のGUIとまったく混じる必要はありません。 – dtech

+0

あなたのC++コードは、信号、スロット、プロパティを使ってQMLで簡単にプラグインするクラスでなければなりません。相互接続のためのインターフェイスが明確に定義されていれば、C++ロジックとQML GUIを分離して分離する必要があります。彼らが所属する場所に物事を保管してください。さもなければ、あなたは悪いデザインを作り、問題を招きます。 – dtech

関連する問題