我是第一次使用QML,并且很难在控件层和业务层之间组织我的代码。
以一种脚踏实地的方式,我所有的事件都应该发送到C++控制层(一个名为 MyController 的C++类,该类继承自 QObject )。现在, MyController 应该了解业务层(例如,其C类称为 MyBusiness )并调用其相关方法。
我的 MyBusiness 实际上是低级类的复杂集合,我将它们放到 main.cpp 中。
以前,我使用QtWidget,并且能够通过上述复杂的聚合方式创建 MyBusiness ,创建 MyController ,并将 MyBusiness 提供给 MyController 以完成其工作。
现在由于QML的工作方式, MyController 实际上已经暴露给QML(通过QML注册),并且 MyController Q_INVOKABLE函数是从QML调用的,并且应该依次调用 MyBusiness 函数。
但是 MyController 现在实际上是在QML中创建的,因此我不再能够让 MyController 知道 MyBusiness 。
我的最佳做法是什么?
最佳答案
我喜欢这样:
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;