在C ++中,我如何获得一个对象的指针" emit"方法?

时间:2014-11-05 12:25:11

标签: c++ pointers signals signals-slots

我目前正在开展一个项目,其中有两个主要对象。 对象A具有良好构建的信号槽接口。 对象B有一个对象A的实例。 我希望向对象A发射一个信号,尽可能地改变对象A-这意味着我想使用对象A的发射方法向自己发送信号。

我认为一个好方法是,对象A将有一个方法,它将指向它的emit方法。对象B将使用该方法并简单地向对象A发射信号。 唯一的问题是我不知道如何(如果可能的话),实际提取一个对象的emit方法,以及指向它的指针。

非常感谢!

2 个答案:

答案 0 :(得分:0)

在Qt"发出"不是一种方法,它是合成糖,归结为

#define emit

所以你不能这样做。如果要从另一个对象发出信号,则将A上的插槽连接到B或B连接到A.

答案 1 :(得分:0)

Qt信号实现为protected成员函数。发出它们只是调用成员函数(注意预处理器有效地删除了伪关键字emit,因为它扩展为空)这意味着你不能从类外发出信号。

但是,您可以将一个信号连接到另一个信号。发出第一个也将导致第二个发射。因此,您只需向B添加适当的信号:

class B : public QObject
{
  Q_OBJECT

  B();

  A a;

signals:
  void emitASignal();
};

B::B()
{
  connect(this, SIGNAL(emitASignal()), &a, SIGNAL(theSignalYouWantToEmit()));
}

然后,执行emit emitASignal();会导致从theSignalYouWantToEmit()发出a