【问题标题】:Notification about property's changes are not received by QMLQML 未收到有关属性更改的通知
【发布时间】:2012-11-27 16:05:41
【问题描述】:

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

首先,我想解释一下我的 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

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

附:如果您需要,我很乐意添加一些额外的说明。

【问题讨论】:

    标签: qt properties ocaml qml


    【解决方案1】:

    问题很简单:我没有从 OCaml 端调用 setter。我还没有意识到使用打印,因为我曾经在设置器和通知器中打印相同的消息。

    附:非常感谢 capisce!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2013-05-13
      • 2017-06-14
      • 1970-01-01
      • 2023-04-05
      • 2016-12-30
      相关资源
      最近更新 更多