Qt中的QObject通用接口 我有一个C++类接口,它由纯虚拟成员函数组成,我想在我的应用程序中生成所有的 QWIDGETS 的父。它有很多信号和插槽,因此它必须继承自QObject。问题是我无法使我的其他对象从此派生: class Interface : public QObject { public slots: virtual void slotA() = 0; signals: void signalA(); };

Qt中的QObject通用接口 我有一个C++类接口,它由纯虚拟成员函数组成,我想在我的应用程序中生成所有的 QWIDGETS 的父。它有很多信号和插槽,因此它必须继承自QObject。问题是我无法使我的其他对象从此派生: class Interface : public QObject { public slots: virtual void slotA() = 0; signals: void signalA(); };,c++,qt,C++,Qt,现在,如果我想创建一个实现这个接口的小部件,我需要做如下操作 class MyWidget : public QWidget, public Interface { }; 但是,这无法完成,因为它不能从QObject继承两次。我该怎么做 注意:不回答此问题,因为我认为它没有给出令人满意的答案要使用信号和插槽,函数不必静态已知。使用旧的信号和插槽宏,可以依靠运行时检测对象中的适当信号和插槽。如果仍要调用->slotA(),您可以在界面中将其设置为正常的非插槽功能。Qt插槽可以很好地实现纯虚拟函

现在,如果我想创建一个实现这个接口的小部件,我需要做如下操作

class MyWidget : public QWidget, public Interface {

};
但是,这无法完成,因为它不能从
QObject
继承两次。我该怎么做


注意:不回答此问题,因为我认为它没有给出令人满意的答案

要使用信号和插槽,函数不必静态已知。使用旧的
信号
插槽
宏,可以依靠运行时检测对象中的适当信号和插槽。如果仍要调用
->slotA(),您可以在界面中将其设置为正常的非插槽功能。Qt插槽可以很好地实现纯虚拟函数。我知道,但我必须在我的子类中重新声明base
interface
中的所有信号和插槽。否则,我会遇到很多错误,如“未找到信号”等。最简单的解决方法是将接口作为小部件的一个成员,并使客户端连接到成员的信号,这些信号以
getInterfaceObject()的形式公开
。您为什么不拥有一个从
QWidget
继承的类
BaseWidget
,并拥有您想要的所有信号/插槽?在此之后,您可以使您的小部件继承自该
BaseWidget
(因为您声明要使其成为应用程序中所有
QWidget
的父部件)。这可以解决这个问题,除非您有应该继承该接口的非
QWidget
s。如果是这样的话,@johanneschaub litb的最后一条评论提供了另一种解决方法。@Mike by
QWidget
我也指它的孩子,例如
QDockWidget