OK、QML から C++ メソッドを呼び出す方法は知っていますが、この場合は機能しません。
これは私のコードがどのように見えるかです (非常に大きいため、実際のコードではありません):
Container //this is my main qml element, where is everything contained and started
{
ElemA
{
id: elemA
...
}
ElemB
{
id: elemB
...
}
}
ElemA
{
MyClass
{
id: myClass
...
}
//myClass.method() //runs fine
//Now I call: elemB.myClass = myClass
//after that, if I call method() it doens't work (below is code)
}
ElemB
{
property MyClass myClass
//myClass.method() //doesn't run at all, neither shows any errors or warnings
}
ElemA と ElemB は基本的に状態であり、そこから切り替えます。次のようになります: すべてが ElemA 状態で始まり、ElemB に切り替えることができますが、切り替えると method() が機能しません (上で述べたように、エラーや警告はありません)。
「elemB.myClass = myClass」を配置すると、何かがうまくいかない(または許可されていない可能性がありますが、どういうわけか合格する)と確信しています。つまり、C++オブジェクトをプロパティとして他の要素に渡すことはできません(QMLを使用) )。
だから私の質問は、これをどのように解決することになっているのですか?
編集:私のコードは実際にはゲームです。私には多くの Elem があり、各 Elem は 1 つの状態を表します (たとえば、ElemMenu はゲーム メニューで、「オプション」などのボタンを押すと、他のことを実行できる ElemOptions 状態に切り替わります)。
MyClass は、ネットワーク用の C++ 実装です。ここでの問題は、2 つの状態 (ネットワーク) の間に C++ オブジェクトのインスタンスを 1 つ持つ必要があることです。
- 最初の状態 (ElemA) は、クライアントの接続を待機し、それらを受け入れています
- 2 番目の状態 (ElemB) はゲームをプレイ中
十分な数のクライアント接続を受け入れたら、ゲームを開始して状態 ElemB に切り替えたいのですが、接続されたクライアントを操作できるように同じオブジェクトが必要です。
このメソッドを使用して myClass を注入しようとしました: viewer.rootContext()->setContextProperty("myClass", new MyClass()); しかし、その後、QML のConnections要素で 「myClass」を使用できません( myClass プロパティは未定義ですが、myClass.something()のようなメソッド呼び出しを実行できます。
MyClassを再実装して静的にするために今考えていること。次に、MyClass の ElemA および ElemB インスタンスを作成できますが、可能であれば作成したくありません。
QtMobility は現在、私にとって選択肢ではありません。
QtCreator 2.5 で QT 1.8.1 を使用しています