QT 重写控件 圆形头像框

重写LABEL类

    1. CRoundLabel::CRoundLabel(QWidget *parent):QLabel(parent)
      在第一步的时候要继承原有的label类,之后才能够对新的类进行操作
    2. 重绘label,这里给它变成了圆形的形状,可以用作头像的控件或者其他
    3.  

       

    4. // .h文件
      #ifndef ROUNDLABEL_H
      #define ROUNDLABEL_H
      #include <QLabel>
      class CRoundLabel:public QLabel
      {
      Q_OBJECT
      public:
      CRoundLabel(QWidget* parent=0);
      signals:
      void sigClick();
      protected:
      void paintEvent(QPaintEvent *e);
      void enterEvent(QEvent* event);
      void leaveEvent(QEvent *event);
      void mousePressEvent(QMouseEvent *ev);
      private:
      bool m_bTransLayer; //透明层
      };
      #endif

       

    5. //.cpp
      #include "roundlabel.h"
      #include <QPainter>
      CRoundLabel::CRoundLabel(QWidget *parent):QLabel(parent)
      {
      m_bTransLayer = false;
      }
      void CRoundLabel::paintEvent(QPaintEvent *e)
      {
      if(NULL != pixmap())
      {
      QPainter painter(this);
      painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
      QPainterPath path;
      int round = qMin(width(), height());
      path.addEllipse(0, 0, round, round);
      painter.setClipPath(path);
      painter.drawPixmap(-1, -1, width()+2, height()+2, *pixmap());
      if(m_bTransLayer)
      {
      //鼠标在label上,加载透明图片
      QPixmap pixMap(":/new/prefix/001.jpg");
      painter.drawPixmap(-1, -1, width()+2, height()+2, pixMap);
      }
      }
      else
      {
      QLabel::paintEvent(e);
      }
      }
      void CRoundLabel::enterEvent(QEvent *event)
      {
      m_bTransLayer = true;
      update();//刷新label
      }
      void CRoundLabel::leaveEvent(QEvent *event)
      {
      m_bTransLayer = false;
      update();//刷新label
      }
      void CRoundLabel::mousePressEvent(QMouseEvent *ev)
      { //鼠标单击消息
      emit sigClick();
      }

    6. 使用我们的控件类

      label我们已经重写了,那么究竟要怎么使用它呢?其实只需要在我们拖动的控件中,将其提升为我们所写的类就可以了,以下是详细操作:

      1. 拖动拉出来一个label在这里插入图片描述
        这时候我们如果运行就可以发现,新拖出来的这个控件还是原来的样式,那么我们写好的label类怎么用呢?很简单,接着往下看
      2. 将新拖过来的label提升为我们所写的类,点击label,右键提升为:在这里插入图片描述
        确认提升之后我们会发现,这个label的类变成了我们所写的label,而非是其他普通的label在这里插入图片描述
        以上便是重写后我们自己类的使用方法。
    7. 版权声明:本文为LlloveNf原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
      本文链接:https://blog.csdn.net/LlloveNf/article/details/109116127
       
       
posted @   代码改变世界11  阅读(271)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示