Qt-如何从QObject同步请求数据

时间:2019-06-20 15:39:34

标签: c++ qt qt5

我的代码的一部分是两个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)

1 个答案:

答案 0 :(得分:0)

听起来像您想要依赖注入。这只是一个简单的类A到类B的引用的花哨的词。

如果在编写源代码时可以确定它是 ClassA ,请使用QPointer<ClassA>。然后只需根据需要调用 ClassA 的任何方法。

如果您无法锁定确切的类,只需知道它将是QObject,然后使用QPointer<QObject>并使用Qt属性或可调用的方法(Q_INVOKABLE或仅一个带有返回值)以请求您想要的东西。

或者,如果 ClassB 实例可以拥有 ClassA 的实例,则只需将指向 ClassA 实例的指针指向B,然后将B设置为A的父级。然后它会被析构函数自动删除(QObject所有权的常见Qt方式)。