7

emit signal_a()我们可以通过like轻松地在定义信号的类中发出信号

class A
{
signals:
    signal_a();

public:
    void fun()
    {
        do_something();
        emit signal_a();
        do_something();
    }
};

但是,如何在 Qt 的另一个类中发出信号?例如

class B
{
public:
    void fun()
    {
        do_something();
        (*a) emit signal_a(); // ???
        do_something();
    }

A* a;
};
4

3 回答 3

11

您不能直接发出信号,因为信号是受保护的方法(在 Qt4 中)。有几种方法可以做你想做的事:

  1. 在 A 类中创建公共方法,该方法将发出必要的信号
  2. 在 B 类中创建信号并将其连接到 A 类中的信号

您应该记住,带有信号的类必须与 QObject 交互并包含 Q_OBJECT 宏。

于 2013-09-20T13:40:25.907 回答
9

在 Qt5 中,你可以这样做

emit a->signal_a();

emit是一个空宏并且信号被设置为公共的(signals“关键字是一个宏,变成public

于 2013-09-20T13:25:08.313 回答
4

Qt 信号是正常的方法。'emit' 关键字将扩展为空字符串,因此只需调用 a.signal_a();

于 2013-09-20T13:25:38.860 回答