QT 自定义圆形QLabel 加载圆形图片 |
您所在的位置:网站首页 › qt中的label控件旋转 › QT 自定义圆形QLabel 加载圆形图片 |
每天自定义一些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_Hcpp 代码: #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 |