c++ - QObject 多重继承

标签 c++ qt user-interface

我正在尝试在 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 继承自 QWidgetSignalInterface ,两者都继承自QObject。这会导致任何问题吗?

我们知道,如果QObject 类是纯虚的(事实并非如此),这个问题就可以轻松解决。

一个可能的解决方案是:

class Interface: public QWidget {
Q_OBJECT

signals:
void IconChanged(QIcon);
void titleChanged(QString);
}

class Widget1: public Interface {

}

这里的问题是我已经有很多从 QWidget 继承的代码,并且很难破解它。还有其他方法吗?

最佳答案

不幸的是,两次继承QObject会导致moc出现问题。

来自 http://qt-project.org :

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/

相关文章:

c++ - Qt 中在两个小部件之间发送 OpenGL 图像的最佳方式

c++ - 继承 QListWidgetItem

user-interface - 哪些网站包含用户界面设计的良好示例?

cocoa - 使用 "Tab"键从 NSTextField 移动到 NSMatrix

c++ - 在类中获取 "this"的上下文并分配给类指针 TheClass*

c++ - 为模板类声明模板方法

c++ - Qt 在可选列表中显示来自资源的图标

c++什么设计将有助于在使用监听器时避免多重继承

c++ - 如何在haskell中封装对象的构造函数和析构函数

java - 是否有任何 Java 库可用于 Windows GUI 的自动化测试?