QML未收到有关财产变更的通知

时间:2012-11-27 16:05:42

标签: qt properties ocaml qml

在我的测试应用程序中,我使用QML和OCaml,它们通过C ++层连接。你可以通过Github调查sources root

首先,我想稍微解释一下我的QML GUI是什么。我的数据是字符串列表的列表(长度为N)。使用这些数据我应该显示N ListViews,它将包含适当列表的元素。对于基于Tcl / Tk gui的传统ocamlbrowser,这种行为很简单。

我知道我的GUI的一个缺点:如果数据被更改但列表的总数不会 - 那么将不会发送有关更改列表长度的信号。这就是我将新数据设置为空列表并发送新的实际数据的原因。所以信号应该发出两次。

Here and below你可以找到描述我的int类型属性的代码,它存储了列表的数量。

现在我们站在我的问题面前。当我在发送信号之前更改OCaml端qDebug()消息中的数据内容时,QML内容不会改变:似乎所有信号都被发出但是没有被接收。这是我的程序的日志(最后三行来自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

那么,您对我的实施中存在问题有什么想法吗?

P.S。如果你需要,我会很乐意增加一些解释。

1 个答案:

答案 0 :(得分:0)

问题很简单:我没有从OCaml方面调用setter。我没有意识到使用打印因为我曾经在setter和notifier中打印相同的消息。

P.S。非常感谢capisce!