私のテストアプリケーションでは、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必要に応じて、いくつかの説明を追加させていただきます。