对C++保护成员的思考

时间:2022-02-14 15:02:39

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