如何在c++中通过类结构共享代码



我正在为Qt框架写作,我想创建一个QWidget。QWidget公开了一些接口,如mousePressEvent和mouseReleaseEvent。我想扩展这个类来允许mousecickevent和mouseDoubleClickEvent。通常,您会考虑扩展QWidget并实现这些功能。问题是还有其他类(例如QPushButton)作为库的一部分提供,它们扩展了QWidget。因此,如何在不扩展每个类和复制代码的情况下将添加的功能添加到这些类中呢?


class ClickHandeler : public QWidget {
    virtual void mouseClickEvent();
    virtual void mouseDoubleClickEvent();
    int clickCount; //initialized to 0;
    void mouseReleaseEvent(QEvent *event){
        clickCount++;
        QTimer::singleShot(500, this, SLOT(checkClick()));
    }
    void checkClick(){
        if (clickCount == 2){
            this->mouseDoubleClickEvent();
            clickCount = clickCount-2;
        } else {
            this->mouseDoubleEvent()
            clickCount--;
        }
    }
}
// QPushButton inherits QWidget too! Yikes!
class MyPushButton : public QPushButton, public ClickHandeler {
    void mouseClickEvent(){
        alert("i have been clicked");
    }
    void mouseDoubleClickEvent(){
        alert("i have been double clicked");
    }
}

我想要像MyPushButton这样的东西,但我担心函数重写不会像预期的那样工作。

如果这个问题对人们来说很明显,我很抱歉,但我不知道术语是什么。我已经谷歌了c++的接口,我得到抽象接口(不能正确解决这个问题)。如果我只是傻了,需要知道一个更好的google术语,请在评论中告诉我,我会删除这个问题。

我认为您只需要扩展QWidget并调用QWidget相同的函数。例如:

class QWidget {
public:
    void mouseClickEvent();
};
class QPushButton {
public:
    void mouseClickEvent();
};
class MyWidget : public QWidget, public QPushButton {
public:
    void mouseClickEvent()
    {
        //base::mouseClickEvent();// ambiguous
        QWidget::mouseClickEvent();
        QPushButton::mouseClickEvent();
        /* Do your own code here */
    }
};

最新更新