c++ - QML 控制层和业务层

标签 c++ qt qtquick2 qt-quick qtquickcontrols

我是第一次使用 QML,很难在控制层和业务层之间组织我的代码。

以一种非常实际的方式,我的所有事件都应该发送到 C++ 控制层(一个名为 MyController 的 C++ 类,它继承自 QObject)。现在 MyController 应该知道业务层(假设它是一个名为 MyBusiness 的 C++ 类)并调用其相关方法。

我的 MyBusiness 实际上是我放在 ma​​in.cpp 中的较低级别类的复杂集合。

以前我使用的是 QtWidget,我能够通过上面提到的这个复杂的聚合创建 MyBusiness,创建 MyController 并将 MyBusiness 提供给 < strong>MyController 让它完成它的工作。

现在由于 QML 的工作方式,MyController 实际上暴露给 QML(通过 QML 注册)并且 MyController Q_INVOKABLE 函数从 QML 调用并且应该依次调用 < strong>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;

关于c++ - QML 控制层和业务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574191/

相关文章:

c++ - 构造函数的编译器优化

C++ - 为什么这个成员需要被声明为静态的?

c++ - Fstream 类 - 关于'>>'运算符的问题

c++ - QRegExp 非捕获括号

c++ - 在非VS项目中包含VS DLL

c++ - 我可以在不使用其 UI 框架的情况下将 Qt 用作 C++ 库吗

qt - QML 文本的奇怪行为

c++ - Noughts and Crosss/Tic Tac Toe Player又去了

c++ - 升级到 Qt 5.15 后,ListView 委托(delegate)中的父级为空

qt - 如何使用 QML StackView?