考虑一个简单的 GUI 显示相当精细计算的输出的情况。
现在我想使用QML编写一个不错的自定义 GUI 。
我还想用QT C++编写我的后台应用程序。
我坐在 QT 文档前面,想知道我
1) 是否应该编写一个QML 应用程序并以某种方式将我的 C++ 类嵌入其中(这绝对有可能),或者我是否
应该编写一个C++ 应用程序
并以某种方式嵌入 QML GUI 在其中并从我的类中修改 QML 属性(这又是可能的)
我已经在 C++ 中使用 QT Widgets 为 GUI 编写了所有内容。我只想将 GUI 移动到 QML 并保留 C++ 类,即使我愿意重写 GUI 的接口。
可能的分析器:
下面标记的解决方案建议保留 C++ 类并专门通过 SIGNALS 和 SLOTS 接口 GUI。所以基本上我最终得到了一个 main.cpp,它实例化了我的主要工作类并像这样显示 QML GUI:
QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();
然后我添加了 myClass 并给了我一个对象来进行连接:
MyClass myClass;
QQuickItem* item = viewer.rootObject();
QObject::connect(item, SIGNAL(buttonClicked()), &myClass, SLOT(mySlot()));
QObject::connect(&myClass, SIGNAL(mySignal(QVariant)), item, SLOT(updateGUI(QVariant)));
在 C++ 类中实现插槽和信号时,您必须使用 QVariant 对象来传输数据。然后 QML 文件实现 SIGNALS,例如用于单击按钮和 SLOTS 以接收要显示的数据。
这正是我所希望的。对我的非 GUI 代码的唯一更改是通过 SIGNALS 和 SLOTS 进行所有交互。现在我什至可以在我的应用程序中使用这两种 GUI(QML / Widgets)。