2016-05-26 11 views
0

Qtで一種の信号をブロードキャストする方法を探しています。 loginが呼び出されると、その後logged()信号がlogout()焼成し、loggedOut()信号さQt信号をすべてのオブジェクトのインスタンスにブロードキャストします。

class Auth : public QObject 
{ 
    Q_OBJECT 
public: 
    Auth() ; 

    Q_INVOKABLE bool isLogged() const ; 

    Q_INVOKABLE void reconnect() ; 

    Q_INVOKABLE void login(QString mail, QString password) ; 

    Q_INVOKABLE void logout() ; 

protected: 
    static QString token_ ; 

signals: 
    void error(QString message) ; 
    void logged() ; 
    void loggedOut() ; 
}; 

: は私の設計では、私はC++とQML側の内部で使用することができますAuthオブジェクトを得ました。私はこのコードを持っているQMLの一部で

の1-

Auth auth ; 
auth.logout() ; 

2つのAuthオブジェクト:

Auth { 
    id: auth 
    onError: console.log("auth error") 
    onLogged: console.log("auth logged") 
    onLoggedOut: console.log("auth logged out") 
} 

2 - そして、私はいくつかの失敗例に行うことができ、C++側で

1から2までは同じではないので、一方から放出された loggedOutはもう一方で発射されません。これは問題ありません。

今私がしようとしているのは、AuthのすべてのインスタンスにloggedOutシグナルをブロードキャストする方法を持つことです。私はAuthの共通インスタンスをC++とqmlの間で共有することを避けたいと思います。

標準的な方法はありますか?

答えて

0

あなたは本質的に、特定のクラス(この場合はAuth)のすべてのインスタンスを見つけるQt/C++の方法を探しているので、私はそうは思わないと思います。例えば、thisまたはthisを参照してください。他の要因の多くに応じて、

、あなたはできます

  • Authオブジェクト内のすべてのクラスインスタンスの静的リストを維持し、手動で最初Authオブジェクトに対してAuth::loggedOut()を接続Auth::Auth()
  • 内の異なるインスタンスに接続します他のすべてのインスタンス(注:循環接続を取得する場合は、無限ループに入りますので注意してください)。
  • 他の(おそらくより良い)のオプションがあまりにもおそらくあり

(私はあなたの「インスタンスを共有していない」規定に違反することを検討したいが) Authシングルトンを作ります。

+0

私は最初の方法を実装しました。私は第二に切り替えることを考えていましたが、厳密には同等ではありません。イベントを誘発する能力が失われてしまうようです。 – Falco

関連する問題