如何通过C ++中的类结构共享代码?

时间:2013-02-28 22:50:41

标签: c++ inheritance

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


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 ++的接口,我得到抽象的接口(它没有正确解决这个问题)。如果我只是愚蠢而且需要知道一个更好的谷歌术语,请在评论中告诉我并删除问题。

1 个答案:

答案 0 :(得分:0)

我认为你只需要扩展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 */
    }
};