7

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;
};
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は空のマクロで、シグナルは public に設定されています ( signals「キーワードは になるマクロですpublic) 。

于 2013-09-20T13:25:08.313 に答える
4

Qtシグナルは通常の方法です。「emit」キーワードは空の文字列に展開されるため、a.signal_a(); を呼び出すだけです。

于 2013-09-20T13:25:38.860 に答える