考虑一个简单的GUI显示相当复杂的计算输出的情况.
现在我想用QML编写一个漂亮的自定义GUI .
我还想在QT C++中编写我的后台应用程序.
我坐在QT文档的前面,想知道我
是否应该编写一个QML应用程序并以某种方式在其中嵌入我的C++类(这是绝对可能的)或者如果我
2)应该编写一个C++应用程序
并以某种方式嵌入QML GUI中的GUI并修改我的类的QML属性(这也是可能的)
我已经使用QT Widgets为GUI编写了C++中的所有内容.我只想将GUI移动到QML并保留C++类,即使我愿意重写GUI的接口.
可能的anser:
下面标记的解决方案建议保留C++类并通过SIGNALS和SLOTS专门连接GUI.所以基本上我最终得到了一个main.cpp,它实例化我的主工作类并显示如下的QML GUI:
QQuickView viewer;
viewer.setSource(QUrl("./qml/main.qml"));
viewer.show();
Run Code Online (Sandbox Code Playgroud)
然后我添加了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)));
Run Code Online (Sandbox Code Playgroud)
在C++类中实现插槽和信号时,必须使用QVariant对象来传输数据.然后,QML文件实现SIGNALS,例如用于单击按钮和SLOTS以接收要显示的数据.
这正是我所希望的.我的非GUI代码的唯一变化是通过SIGNALS和SLOTS进行所有交互.现在我甚至可以为我的应用程序使用两个GUI(QML/Widgets).