Qt multiple inheritance and signals

前端 未结 3 524
名媛妹妹
名媛妹妹 2021-02-09 06:38

I\'m having a problem with QT regarding multiple enheritance because of QObject. I know that a lot of others have the same problems but I don\'t know how I should fix it.

<
3条回答
  •  被撕碎了的回忆
    2021-02-09 07:34

    It requires a bit more code, but what I have done in the past is make one of them (your NavigatableItem in this case) a pure virtual class, i.e. interface. Instead of using the "signals" macro, make them pure virtual protected functions. Then multiply-inherit from your QObject-derived class as well as the interface, and implement the methods.

    I know it is somewhat controversial, but avoiding multiple implementation inheritance at all costs does solve a host of problems and confusion. The Google C++ Style Guidelines recommend this, and I think it is good advice.

    class NavigatableItemInterface
    {
        // Don't forget the virtual destructor!
        protected:
            virtual void deselected() = 0;
            virtual void selected() = 0;
            virtual void activated() = 0;
    };
    
    class Button : public NavigatableItemInterface, public QToolButton
    {
        Q_OBJECT
        ...
        signals:
            virtual void deselected();
            ...
    }
    

提交回复
热议问题