QT 自定义圆形QLabel 加载圆形图片

您所在的位置:网站首页 qt中的label控件旋转 QT 自定义圆形QLabel 加载圆形图片

QT 自定义圆形QLabel 加载圆形图片

2024-01-19 22:49| 来源: 网络整理| 查看: 265

     每天自定义一些qt 控件,让自己学到更多的东西,我们经常看到一些圆形的账号图片,我们知道常用QLabel加载图片,但是加载的都是方形的,而且qt并不像html 那样改变特别方便。

我们常见的图像如:

还有csdn的用户的:

都是这种圆形图片,想要需要我们重新定义控件,自己来画,才会出结果。

然后我们就从新定义一个类,来继承QLable 或者继承 QFrame :

这里提示一下,我定义类的时候把MyLabel 拼写错了,写成了MyLable 。大家自己写的时候演注意一下。

代码如下 :

#ifndef MYLABLE_H #define MYLABLE_H #include #include class MyLable :public QLabel { Q_OBJECT public: MyLable(QWidget* parent = nullptr); signals: void signClick(); protected: void paintEvent(QPaintEvent *e); void mousePressEvent(QMouseEvent *ev); void mouseMoveEvent(QMouseEvent *ev); void mouseReleaseEvent(QMouseEvent *ev); private: bool m_set;//透明度的 QPixmap oldMap; }; #endif // MYLABLE_H

cpp 代码:

#include "mylable.h" #include MyLable::MyLable(QWidget* parent):QLabel (parent) { m_set = false; } void MyLable::paintEvent(QPaintEvent *e) { if(nullptr != 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); oldMap = *pixmap(); //获取原来的 if(m_set) { QPixmap pixMap(":/images/images/2.jpg"); painter.drawPixmap(-1,-1,width()+10,height()+10,pixMap); } else { painter.drawPixmap(-1,-1,width()+10,height()+10,oldMap); } } else { QLabel::paintEvent(e); } } void MyLable::mousePressEvent(QMouseEvent *ev) { m_set = true; update(); QLabel::mousePressEvent(ev); } void MyLable::mouseMoveEvent(QMouseEvent *ev) { m_set = false; update(); QLabel::mouseMoveEvent(ev); } void MyLable::mouseReleaseEvent(QMouseEvent *ev) { m_set = false; update(); emit signClick(); QLabel::mouseReleaseEvent(ev); }

 使用的方法:

mylabel = new MyLable(this); QPixmap pixmap(":/images/images/1.jpg"); mylabel->setPixmap(pixmap); mylabel->setGeometry(0,0,100,100); ui->layoutpicture->addWidget(mylabel);

效果图:

 

喜欢我的博客可以关注,点赞,让我们越来越好。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3