当前位置:   article > 正文

qt 多重继承_QObject多重继承

qt继承两个qobject

I am trying to use mix in classes for C++/Qt to provide a whole bunch of widgets with a common interface. The interface is defined in such as way so that if it is defined as the base class for other widget classes, then the widget themselves will have those signals. ie refer below.

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

}

Looking at the class hierarchy the problem becomes apparent, I have stumbled on to the dreaded diamond in Multiple Inheritance, where the Widget1 inherit from QWidget, and SignalInterface, and both which inherit from QObject. Will this cause any issues?

We know that this problem can be easily solved if the QObject class is pure virtual (which is not the case).

A possible solution would be

class Interface: public QWidget {

Q_OBJECT

signals:

void IconChanged(QIcon);

void titleChanged(QString);

}

class Widget1: public Interface {

}

The issue here is that I already have lot of code that inherit from QWidget, and its painful to hack that in. Is there another way?

解决方案

Unfortunately inheriting QObject twice will cause problems in moc.

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.

I would suggest using something more like the delegate pattern, or recreate with a HasA not a IsA relationship.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/114996
推荐阅读
相关标签
  

闽ICP备14008679号