Я впервые использую QML и с трудом могу организовать свой код между контрольным и бизнес-уровнями.
Очень простым способом все мои события должны быть отправлены на уровень управления C ++ (класс C ++, называемый MyController который наследует от QObject). Сейчас MyController должен знать о бизнес-уровне (скажем, это класс C ++ под названием Мой бизнес) и вызвать соответствующие методы.
мой Мой бизнес на самом деле сложная совокупность классов более низкого уровня, которые я собрал в main.cpp.
Ранее я использовал QtWidget и смог создать Мой бизнес с помощью этой сложной совокупности, упомянутой выше, создайте MyController и предоставить Мой бизнес в MyController чтобы сделать свою работу.
Теперь из-за способа работы QML, MyController фактически подвергается воздействию QML (посредством регистрации QML) и MyController Функции Q_INVOKABLE вызываются из QML и должны в свою очередь вызывать Мой бизнес функции.
Но MyController теперь фактически создан в QML, поэтому я больше не могу позволить MyController знать о Мой бизнес.
Какова лучшая практика в моем случае?
Я делаю так:
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;
Вот решения, о которых я подумал:
Я решил пойти на решение 3 (так как оно лучше подходит для моего варианта использования), но решение 4 (от @Vulkan) также полезно в некоторых случаях. Решения 1 и 2 менее ценны.