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

use*_*020 7 c++ qt signals

我们可以通过emit signal_a()类似方式在类中定义信号的类中发出信号

class A
{
signals:
    signal_a();

public:
    void fun()
    {
        do_something();
        emit signal_a();
        do_something();
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

A* a;
};
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nov 11

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

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

您应该记住,带有信号的类必须是Q对话并包含Q_OBJECT宏.


rat*_*eak 8

在Qt5中,你可以做到

emit a->signal_a();
Run Code Online (Sandbox Code Playgroud)

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

  • @khajvah那么你应该补充一点,它只对Qt5有效,但不对Qt4有效. (3认同)