c++ - Qt/C++中多重继承的正确方式是什么?

标签 c++ qt qt4 multiple-databases

在我的 Qt 应用程序中,我有一个基类如下。我正在使用 QObject,因为我想在所有派生类中使用 Signal-Slot 机制。

class IRzPlugin : public QObject {

public:
  virtual void registerMenu(QWidget*);
  virtual void execute();
}

然后我有另一个类如下。我需要从 QWidget 进行扩展,因为我需要在所有派生类中实现事件处理方法(例如 mouseMoveEvent()keyPressEvent() 和其他)。

class IRzLayeringPlugin : public IRzPlugin , public QWidget{

}

但是编译器给出了这些错误:

C:\svn\osaka3d\tags\iter08\prototype\osaka3d\rinzo\plugin\moc_IRzLayeringPlugin.cxx: In member function `virtual const QMetaObject* IRzLayeringPlugin::metaObject() const':
C:\svn\osaka3d\tags\iter08\prototype\osaka3d\rinzo\plugin\moc_IRzLayeringPlugin.cxx:51: error: `QObject' is an ambiguous base of `IRzLayeringPlugin'
C:\svn\osaka3d\tags\iter08\prototype\osaka3d\rinzo\plugin\moc_IRzLayeringPlugin.cxx:51: error: `QObject' is an ambiguous base of `IRzLayeringPlugin'
make[2]: *** [CMakeFiles/Rinzo.dir/plugin/moc_IRzLayeringPlugin.cxx.obj] Error 1

最佳答案

在当前版本中,不可能在派生类的多个继承路径中使用 QObject(例如您的 IRzLayeringPlugin 类)。我见过的唯一解决方案是创建一个没有任何 QObject 继承的接口(interface)类,但具有直接对应于您要使用的 QObject 功能的功能,然后实现接口(interface)和特定类中的其他 QObject 类继承之间的桥梁。它很快就会变得丑陋。

关于c++ - Qt/C++中多重继承的正确方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201273/

相关文章:

c++ - 什么是快速提升无符号整型元素数组大小的方法?

c++ - 函数调用顺序

qt - 与 Qt 的 foreach 一起使用的自定义容器要求

python - 在 pyqt4 中的特定小部件(透明标签)上覆盖文本

linux - 在 Ubuntu 14.04 LTS 上为 Windows 32 位编译 VLC 2.1

c++ - PhysX:关节摩擦/"stiff"关节

c++ - 获取设置 failbit 的流位置/std::ios::failure 被抛出

c++ - 我如何获得指向调用 (Q)Object 的方法的指针?

c++ - 如何安装libusb?

c++ - QT:QActionGroup 添加到 QMenu 后,其成员的父对象是谁?