加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Qt / C中多重继承的正确方法是什么?

发布时间:2020-12-16 03:28:32 所属栏目:百科 来源:网络整理
导读:在我的Qt应用程序中,我有一个基类如下.我正在使用QObject,因为我想在所有派生类中使用Signal-Slot机制. class IRzPlugin : public QObject {public: virtual void registerMenu(QWidget*); virtual void execute();} 然后我有另一个课程如下.我需要从QWidget
在我的Qt应用程序中,我有一个基类如下.我正在使用QObject,因为我想在所有派生类中使用Signal-Slot机制.
class IRzPlugin : public QObject {

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

然后我有另一个课程如下.我需要从QWidget扩展,因为我需要在所有派生类中实现事件处理方法(mouseMoveEvent(),keyPressEvent().. etc);

class IRzLayeringPlugin : public IRzPlugin,public QWidget{

}

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

C:svnosaka3dtagsiter08prototypeosaka3drinzopluginmoc_IRzLayeringPlugin.cxx: In member function `virtual const QMetaObject* IRzLayeringPlugin::metaObject() const':
C:svnosaka3dtagsiter08prototypeosaka3drinzopluginmoc_IRzLayeringPlugin.cxx:51: error: `QObject' is an ambiguous base of `IRzLayeringPlugin'
C:svnosaka3dtagsiter08prototypeosaka3drinzopluginmoc_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继承的接口类,但是使用与要使用的QObject函数直接对应的函数,然后在界面和您的其他QObject类继承之间实现桥接类.它变得丑陋相当快.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读