如何在接口中定义信号?
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")。。但是这样我只能从一个接口继承(QObject不支持多重继承)。
结论:按照建议,我将选择第一个。。
发布于 2013-09-11 13:45:07
您可以检查this topic以获得一些解决方案。
发布于 2013-09-11 13:38:50
不幸的是,Qt不能处理来自QObject的多个继承(参见this Q&A),因此不能从它派生所有接口(否则您将无法从多个接口派生)。因此,您可能有类似于IQObject接口的
virtual QObject* qObject() = 0方法,因此不需要始终将它们转换为QObject。
至于为信号提供接口-没有这样的东西。您可以做的是使它们成为虚拟抽象,如果您真的需要强制执行这个编译时检查(因为signals:只是protected:的别名),它就可以工作。如果没有,只需检查connect()方法的返回值。
https://stackoverflow.com/questions/18742138
复制相似问题