如何在接口中定义信号?
class ISomeInterface
{
signals:
virtual void added(const QString& id) = 0;
virtual void removed(const QString& id) = 0;
// bla, other methods
}
Afaik,信号不应该是虚拟的,但如果我想定义一个信号需要在实现interface =>的类中实现。这该怎么做?或者你只是让它们非抽象......但接口在这里没有Q_OBJECT声明!在这种情况下生成的代码是否正确?最重要的是......如果你想连接信号,你需要一个坏的(f * * * g)强制转换为QObject。
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")
..但这样我只能从一个接口继承(QObject不支持多重继承)。
结论:根据建议,我会选择第一个。
答案 0 :(得分:3)
您可以查看this topic以获取解决方法。
答案 1 :(得分:2)
不幸的是,Qt没有处理来自QObject的多重继承(请参阅this Q&A),因此您无法从中获取所有接口(否则您将无法从多个接口派生)。因此,您可能会使用IQObject
与
virtual QObject* qObject() = 0
方法,因此您无需始终将它们强制转换为QObject。
至于为信号提供接口 - 没有这样的事情。您可以做的是使它们成为虚拟抽象,如果您确实需要强制执行此编译时检查(因为signals:
只是protected:
的别名),它将起作用。如果不这样做,只需检查connect()
方法的返回值。