Управление QML и бизнес-уровни

Я впервые использую QML и с трудом могу организовать свой код между контрольным и бизнес-уровнями.

Очень простым способом все мои события должны быть отправлены на уровень управления C ++ (класс C ++, называемый MyController который наследует от QObject). Сейчас MyController должен знать о бизнес-уровне (скажем, это класс C ++ под названием Мой бизнес) и вызвать соответствующие методы.

мой Мой бизнес на самом деле сложная совокупность классов более низкого уровня, которые я собрал в main.cpp.

Ранее я использовал QtWidget и смог создать Мой бизнес с помощью этой сложной совокупности, упомянутой выше, создайте MyController и предоставить Мой бизнес в MyController чтобы сделать свою работу.

Теперь из-за способа работы QML, MyController фактически подвергается воздействию QML (посредством регистрации QML) и MyController Функции Q_INVOKABLE вызываются из QML и должны в свою очередь вызывать Мой бизнес функции.

Но MyController теперь фактически создан в QML, поэтому я больше не могу позволить MyController знать о Мой бизнес.

Какова лучшая практика в моем случае?

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

Другие решения

Вот решения, о которых я подумал:

  1. Я мог бы создать Мой бизнес в MyController но это было бы немного грязно (так как ответственность за бизнес не должна быть в руках контролера)
  2. Я мог бы также создать третий Мое заявление класс, единственная цель которого будет присоединиться MyController а также Мой бизнес но затем каждый раз, когда я создаю новую функцию Q_INVOKABLE, я должен был бы создать функцию в Мое заявление (быть вызванным) и передать его MyController (для этого позвонить Мой бизнес. Дело не в том, что я ленив, но такая избыточность добавит бремени обслуживания
  3. Я мог бы сделать из одного Мой бизнес и позвонить из MyController
  4. Я мог бы использовать подход @ Velkan (см. Выше)

Я решил пойти на решение 3 (так как оно лучше подходит для моего варианта использования), но решение 4 (от @Vulkan) также полезно в некоторых случаях. Решения 1 и 2 менее ценны.

0

По вопросам рекламы [email protected]