我是第一次使用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;

10-06 15:07