Каков корректный способ Множественного наследования в QT/C++?

В моем спокойном приложении у меня есть базовый класс следующим образом. Я использую QObject, потому что я хочу использовать механизм Слота Сигнала во всех производных классах.

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
12
задан Venemo 13 August 2015 в 18:52
поделиться

2 ответа

В текущем воплощении невозможно использовать QObject в путях множественного наследования для производного класса (например, вашего класса IRzLayeringPlugin ). Единственное решение, которое я когда-либо видел, - это создать класс интерфейса без какого-либо наследования QObject , но с функциями, которые напрямую соответствуют функциям QObject , которые вы хотите использовать, а затем реализовать мост между интерфейсом и другим наследуемым классом QObject в вашем конкретном классе. Довольно быстро это становится уродливым.

7
ответ дан 2 December 2019 в 20:15
поделиться

Базовый класс QObject многократно включается в производный класс. Для решения проблемы необходимо использовать виртуальных базовых классов .

2
ответ дан 2 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: