考虑一个简单的 GUI 显示相当复杂的计算输出的情况。
现在我想使用编写一个漂亮的自定义 GUIQML.
我还想写我的后台应用程序QT C++.
我坐在 QT 文档前,想知道
如果我
1)应该写一个QML应用并以某种方式将我的 C++ 类嵌入其中
(这是绝对可能的)或者如果我
2)应该写一个C++应用程序并以某种方式在其中嵌入 QML GUI 并修改我的类中的 QML 属性
(这又是可能的)
我已经使用 GUI 的 QT Widgets 用 C++ 编写了所有内容。我只想将 GUI 移至 QML 并保留 C++ 类,即使我愿意重写 GUI 的界面。
可能的答案:
下面标记的解决方案建议保留 C++ 类并通过信号和槽专门连接 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 文件实现信号,例如用于单击按钮和插槽来接收要显示的数据。
这正是我所希望的。对我的非 GUI 代码的唯一更改是通过信号和插槽进行所有交互。现在我什至可以在我的应用程序中使用这两种 GUI(QML / Widget)。