インターフェイスでシグナルを定義する方法は?
class ISomeInterface
{
signals:
virtual void added(const QString& id) = 0;
virtual void removed(const QString& id) = 0;
// bla, other methods
}
Afaik、信号は仮想であってはなりませんが、インターフェイスを実装するクラスで信号を実装する必要があることを定義したい場合 => これを行う方法は? それとも、単純にそれらを非抽象化しますか...しかし、インターフェイスには Q_OBJECT 宣言がありません! この場合、正しいコードが生成されますか? その上...シグナルに接続したい場合は、 QObject への悪い (f* * *g) キャストが必要です。
class ISomeInterface
{
signals:
void added(const QString& id);
void removed(const QString& id);
// bla, other methods
}
それとも、そのように実装しようとしていますか?
class ISomeInterface : public QObject
{
Q_OBJECT
signals:
void added(const QString& id);
void removed(const QString& id);
// bla, other methods
}
Q_DECLARE_INTERFACE(ISomeInterface, "ISomeInterface")
..しかし、この方法では、1 つのインターフェイスからしか継承できません (QObject は多重継承をサポートしていません)。
結論: 示唆されているように、最初のものを使用します。