c++ - QObject 多重继承

我正在尝试在 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 关系重新创建。

https://stackoverflow.com/questions/8578657/

相关文章:

c++ - 我真的需要为 const 对象实现用户提供的构造函数吗?

c++ - 架构 x86_64 : Compiling problems 的 undefined s

c++ - C 和 C++ 标准之间的关系是什么?

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

c++ - 在 C++ 中设置本地环境变量

c++ - 如何轻松查看 C/C++ #include 图?

c++ - 标准的 atomic bool 和 atomic flag 之间的区别

c++ - 为 Windows 编写超薄 C++ 程序(如 uTorrent)

c++ - 向 Python 公开 C++ API

c++ - 在函数模板中使用静态局部变量的地址作为类型标识符是否安全?