QObject Multiple Inheritance

前端 未结 2 1761
太阳男子
太阳男子 2020-12-01 15:36

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

相关标签:
2条回答
  • 2020-12-01 16:09

    Unfortunately inheriting QObject twice will cause problems in moc.

    From 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.

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

    0 讨论(0)
  • 2020-12-01 16:24

    Qt allows multiple inheritance if the base class inherits privately from QObject.

    Example:

    class Base: private QObject {
       Q_OBJECT
       /*Can use signals and slots like any other QObject-derived class*/
    };
    
    class Derived1: public Base {
       /*Cannot use signals/slots because it does not "see" that Base inherits from QObject*/
    };
    
    class Derived2: public QWidget, public Base {
       Q_OBJECT
       /*Can use signals/slots plus has all the functionality of QWidget and Base*/
    };
    

    Of course, private inheritance is a different animal altogether and may not give you the solution you really need. What I use it for is when I can get away with using signals/slots only in the base class. When I really do need QObject behavior in a derived class, I inherit from QObject specifically for just that class.

    0 讨论(0)
提交回复
热议问题