我第一次使用QML,并且很难在控件和业务层之间组织我的代码。
以一种脚踏实地的方式,我的所有事件都应该被发送到C ++控制层(一个名为 MyController 的C ++类,它继承自 QObject )。现在 MyController 应该知道业务层(比如说它是一个名为 MyBusiness 的C ++类)并调用它的相关方法。
我的 MyBusiness 实际上是我在 main.cpp 中放在一起的较低级别类的复杂聚合。
之前我使用的是QtWidget,我可以通过上面提到的这个复杂的聚合创建 MyBusiness ,创建 MyController 并提供 MyBusiness 到< strong> MyController 让它完成它的工作。
现在由于QML的工作方式, MyController 实际上暴露于QML(通过QML注册), MyController Q_INVOKABLE函数从QML调用,应该反过来调用 MyBusiness 函数。
但 MyController 现在实际上是在QML中创建的,因此我无法让 MyController 了解 MyBusiness 。
在我的案例中,最佳做法是什么?
答案 0 :(得分:1)
我喜欢这样:
import QtQuick 2.5
Item {
MyController {
business: businessObj
}
MyBusiness {
id: businessObj
}
}
在MyController.h
:
class MyController
{
Q_OBJECT
Q_PROPERTY(MyBusiness* business MEMBER m_business);
...
MyBusiness *m_business;
答案 1 :(得分:0)
以下是我想过的解决方案:
我决定采用解决方案3(因为它更适合我的用例),但解决方案4(来自@Vulkan)在某些用例中也很有价值。解决方案1和2的价值较低。