0

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

4

1 回答 1

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 */
    }
};
于 2013-02-28T23:57:44.907 回答