我正在写Qt框架,我想创建一个QWidget。 QWidget公开了一些接口,如mousePressEvent和mouseReleaseEvent。我想扩展这个类来允许mouseClickEvent和mouseDoubleClickEvent。通常情况下,你会想扩展QWidget并实现这些功能。问题是还有其他类(例如QPushButton)作为扩展QWidget的库的一部分提供。因此,如何将这些附加功能添加到这些类中,而无需扩展每个类并复制代码?如何通过C++中的类结构共享代码?
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++的接口,并且我得到了抽象接口(它不能很好地解决这个问题)。如果我只是愚蠢,需要知道一个更好的谷歌术语,让我知道在评论中,我会删除这个问题。
您可以使用继承从此派生其他类。 – user1929959 2013-02-28 22:55:26
@ user1929959是的,这就是我指出的,但问题是,我不想复制每个新的扩展类的代码,这是可笑的不可维护 – chacham15 2013-02-28 22:56:12
在这种情况下,只是在其他平凡的方式覆盖方法。 – user1929959 2013-02-28 22:58:35