对C++保护成员的思考

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



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值