1

私のテストアプリケーションでは、C++レイヤーで接続されたQMLとOCamlの両方を使用しています。Githubを介して調査できるソースルートがあります。

まず、 QMLGUIとは何かを少し説明したいと思います。私のデータは文字列リストのリスト(長さN)です。このデータを使用して、適切なリストの要素を含むN個のListViewを表示する必要があります。この動作は、Tcl /TkGUIに基づく従来のocamlbrowserにとって単純です。

GUIの欠点の1つを知っています。データが変更されても、上位リストの総数が変更されない場合、リストの長さの変更に関するシグナルは送信されません。そのため、新しいデータを空のリストと等しく設定し、新しい実際のデータを送信します。したがって、信号は2回発信する必要があります。

ここと下に、リストの数を格納するint型の私のプロパティを説明するコードがあります。

そして今、私たちは私の問題の真正面に立っています。シグナルを出力する前にOCaml側のqDebug()メッセージのデータコンテンツを変更すると、QMLコンテンツは変更されません。すべてがシグナルを出力しているように見えますが、受信されていません。これは私のプログラムからのログです(最後の3行はC ++ qDebug()側からのもので、他はOCaml側からのものです):

setSelectedIndexAt 0 to 2
selectedIndexes.length = 1
new path: /2
new_data.length = 1
[ [ Lazy; Parsing; Weak; Pervasives; Buffer; Printf; Toploop; Queue; Graphics; Arg; Num;     CamlinternalLazy; GraphicsX11; MoreLabels; Stream; Dynlink; Oo; Obj; Callback; Format; Complex; Genlex; UnixLabels; Stack; Lexing; Marshal];
[t; create; length; set; get; get_copy; check; fill; blit; S; Make ] ]
selected: [2; -1]
"emitted tablesChanged 0" 
"emitted tablesChanged 2" 
showDescription changed

それで、私の実装に問題があるアイデアはありますか?

PS必要に応じて、いくつかの説明を追加させていただきます。

4

1 に答える 1

0

問題は単純でした。OCaml側からセッターを呼び出さなかったのです。私はsetterとnotifierで同じメッセージを印刷していたので、印刷を使用していることに気づいていません。

PS capisceに感謝します!

于 2012-11-27T17:02:00.100 に答える