我正在尝试在 C++/Qt 的类中使用混合来提供一大堆具有通用界面的小部件。接口(interface)是这样定义的,如果它被定义为其他小部件类的基类,那么小部件本身就会有这些信号:
class SignalInterface: public QObject {
Q_OBJECT
public:
SignalInterface();
virtual ~SignalInterface();
signals:
void iconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public SignalInterface, QWidget{
public:
Widget1()
virtual ~Widget1()
// The Widget Should Inherit the signals
}
查看类层次结构,问题变得很明显,我偶然发现了多重继承中可怕的菱形,其中 Widget1
继承自 QWidget
和 SignalInterface
,两者都继承自QObject
。这会导致任何问题吗?
我们知道,如果QObject
类是纯虚的(事实并非如此),这个问题就可以轻松解决。
一个可能的解决方案是:
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
这里的问题是我已经有很多从 QWidget
继承的代码,并且很难破解它。还有其他方法吗?
最佳答案
不幸的是,两次继承QObject
会导致moc
出现问题。
If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.
我建议使用更像委托(delegate)模式的东西,或者使用 HasA 而不是 IsA 关系重新创建。
关于c++ - QObject 多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8578657/