我的代码的一部分是两个C ++类'ClassA'和'ClassB',它们都从QObject继承。
在某些方法中,ClassB需要同步请求存储在ClassA中的数据。
ClassA <-----请求数据----- ClassB
Qt API是否类似于可用于它的信号/插槽?
我可以想到两种可能的选择,但我不确定 如果它们在架构上是正确的:
1)在ClassA中定义Q_INVOKABLE函数,该函数将返回所需的数据作为其返回值,并在ClassB中调用它。
但是我不确定Q_INVOKABLE是否可以用于C ++ / QML绑定以外的目的,以及在其他情况下如何正确注册。
2)分别在ClassB / ClassA中创建常规信号/插槽对。
在ClassB中发出的信号将用于从ClassA请求数据,并且将有一个指针作为其输入arg,指向存储数据的位置。 ClassA中的插槽会将数据写入此指针。
void ClassA::slot(type *ptr)
{
// write data to ptr
}
void ClassB::signal(type *ptr)
答案 0 :(得分:0)
听起来像您想要依赖注入。这只是一个简单的类A到类B的引用的花哨的词。
如果在编写源代码时可以确定它是 ClassA ,请使用QPointer<ClassA>
。然后只需根据需要调用 ClassA 的任何方法。
如果您无法锁定确切的类,只需知道它将是QObject
,然后使用QPointer<QObject>
并使用Qt属性或可调用的方法(Q_INVOKABLE
或仅一个带有返回值)以请求您想要的东西。
或者,如果 ClassB 实例可以拥有 ClassA 的实例,则只需将指向 ClassA 实例的指针指向B,然后将B设置为A的父级。然后它会被析构函数自动删除(QObject所有权的常见Qt方式)。