QT 重写控件 圆形头像框
2022/2/24 6:23:12
本文主要是介绍QT 重写控件 圆形头像框,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
重写LABEL类
- CRoundLabel::CRoundLabel(QWidget *parent):QLabel(parent)
在第一步的时候要继承原有的label类,之后才能够对新的类进行操作 - 重绘label,这里给它变成了圆形的形状,可以用作头像的控件或者其他
-
// .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 -
//.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();
} -
使用我们的控件类
label我们已经重写了,那么究竟要怎么使用它呢?其实只需要在我们拖动的控件中,将其提升为我们所写的类就可以了,以下是详细操作:
- 拖动拉出来一个label
这时候我们如果运行就可以发现,新拖出来的这个控件还是原来的样式,那么我们写好的label类怎么用呢?很简单,接着往下看 - 将新拖过来的label提升为我们所写的类,点击label,右键提升为:
确认提升之后我们会发现,这个label的类变成了我们所写的label,而非是其他普通的label
以上便是重写后我们自己类的使用方法。
- 拖动拉出来一个label
这篇关于QT 重写控件 圆形头像框的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现