对C++保护成员的思考

来源:互联网 发布:爱编程 微信小程序 编辑:程序博客网 时间:2024/05/17 00:02

这几天又考虑将QT好好学一下,由于C++学过,但很少用,对里边的好多理论忘记了不少。

学习网上一个关于事件类型和处理的QT例子,对里边自定义的类继承QLabel类,并在自定义的类EventLabel里使用了QLabel的保护成员函数,代码如下:
#include <QApplication>#include <QWidget>#include <QLabel>#include <QMouseEvent>//声明了一个EventLabel类//mouseMoveEvent mousePressEvent mouseReleaseEvent三个从QLabel继承过来的class EventLabel : public QLabel{protected:    void mouseMoveEvent(QMouseEvent *event);    void mousePressEvent(QMouseEvent *event);    void mouseReleaseEvent(QMouseEvent *event);};void EventLabel::mouseMoveEvent(QMouseEvent *event){    QString msg;    msg.sprintf("<center><h1>Move: (%d, %d)</h1></center>",                 event->x(), event->y());    this->setText(msg);}void EventLabel::mousePressEvent(QMouseEvent *event){    QString msg;    msg.sprintf("<center><h1>Press: (%d, %d)</h1></center>",                 event->x(), event->y());    this->setText(msg);}void EventLabel::mouseReleaseEvent(QMouseEvent *event){    QString msg;    msg.sprintf("<center><h1>Release: (%d, %d)</h1></center>",                 event->x(), event->y());    this->setText(msg);}int main(int argc, char *argv[]){    QApplication app(argc, argv);    EventLabel *label = new EventLabel;    label->setWindowTitle("MouseEvent Demo");    label->resize(300, 200);    label->show();    return app.exec();}
在类EventLabel定义里,继承了三个QLabel类也有的三个保护成员
class EventLabel : public QLabel{protected:    void mouseMoveEvent(QMouseEvent *event);    void mousePressEvent(QMouseEvent *event);    void mouseReleaseEvent(QMouseEvent *event);};
相当于在这个新类里边,继承了QLabel的这个三个保护成员的一部分功能,同时也重新定义了这三个函数内容。

原QT工程功能:实时显示鼠标的坐标,如下:

当然,由于是C++理论不熟练,才有此想法:这个新类从QLabel继承了三个保护函数,相当于继承了鼠标的操作与三个函数的连接关系(具体就是点击鼠标、松开、移动与三个函数的对应关系),在新类里边应用了这种对应关系,然后重新编写了函数要完成的内容。(先放在这,以后熟练了再纠正这个想法)