如何在Qt中的另一个类中发出信号?

时间:2013-09-20 13:22:35

标签: c++ qt signals

我们可以通过emit signal_a()

那样轻松地在定义信号的类中发出信号
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;
};

3 个答案:

答案 0 :(得分:11)

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

  1. 在A类中创建公共方法,它将发出必要的信号
  2. 在B类中创建信号并将其连接到A类信号
  3. 你应该记住,带信号的类必须插入QObject并包含Q_OBJECT宏。

答案 1 :(得分:8)

在Qt5中,你可以做到

emit a->signal_a();

emit是一个空宏,信号设置为公开(signals“关键字是一个变为public的宏

答案 2 :(得分:4)

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