QT 重写控件 圆形头像框

重写LABEL类

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

       

       

    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. 拖动拉出来一个labelQT 重写控件 圆形头像框
        这时候我们如果运行就可以发现,新拖出来的这个控件还是原来的样式,那么我们写好的label类怎么用呢?很简单,接着往下看
      2. 将新拖过来的label提升为我们所写的类,点击label,右键提升为:QT 重写控件 圆形头像框
        确认提升之后我们会发现,这个label的类变成了我们所写的label,而非是其他普通的labelQT 重写控件 圆形头像框
        以上便是重写后我们自己类的使用方法。
    7.    
上一篇:牛客C++专项训练5.20 构造函数+模板+malloc


下一篇:JVM中itable的一些问题