美文网首页
Qt quick 存在的问题

Qt quick 存在的问题

作者: 土DOU吹雪 | 来源:发表于2019-12-27 08:43 被阅读0次

在 qml 中调用 .cpp 中函数不便

通过此种方式调用的类,在 Qt Creator 中,调用时会遇到一些问题。


例如,在 serialTerminal 中,存在 openSerial 函数:


在 qml 中调用时:
1.首先无法由函数转到定义。
2.其次,当函数的实际参数与定义的参数不匹配时,程序在编译、调试时均无法明显的看出,但函数会直接跳过执行。(qt以某种方式决定调用 openSerialPortSlot 重载,并将 baud 参数设置为 0)
3.Qt creator 对 qml 的 UI 支持并不好,修改代码的实时显示会有问题。

下图是个参数错误但无法检测出的例子:


下图是 UI 显示的问题:


尝试解决方案1:

采用其他的 C++ 和 qml 的交互方式。

A.使用 qmlRegisterType 将 C++ 注册为 qml 的类:

此方法通过 qmlRegisterType 方法将 SerialTerminal 类注册为 SerialEXP 库,并在 qml 中以 SPExample 的形式调用,如下图所示:


缺点是方法通常用于定义控件,需要通过实例化来调用其中的函数,而不能直接通过类调用函数(也许定义成虚函数可以?)。导入和使用如下图所示:


当参数不匹配时,程序在编译调试时依旧无法检查出,但程序总会执行(执行时通过某种方式忽略参数不匹配的影响)。(利用 try-catch + 返回值的方式勉强可以使用)

如果真的在 Qt Creator 中使用,需要尽量将在 qml 中的逻辑写的简单,最好一个事件只调用一个函数,且函数具有返回值能判断是否正确执行。

尝试解决方案2:

采用 VS 作为开发 Qt 的 IDE。

尝试解决方案3:

使用 Qt widget 进行开发。

补充:在 C++ 中修改 QML 同样不便

下文代码希望在 C++ 中修改 QML 中 IMG 的值,但是在每次修改时,总会弹出新窗口,无法解决。


相关文章

网友评论

      本文标题:Qt quick 存在的问题

      本文链接:https://www.haomeiwen.com/subject/fiuroctx.html