Qt自定义控件之圆形按钮、圆形头像

  • 前言
  • 代码实现
  • 实验效果

前言

现在很多软件的头像或者按钮都是圆形了,看起来比较舒服。比如QQ登录头像,酷狗客户端的一些按钮都是圆形。Qt实现圆形头像,大致有几种思路,第1种就是图片遮罩的方式,还有一种方法是使用样式表设置border-radius来实现圆形边框。这里要介绍的是使用Qt的绘画大师QPainter来实现。

代码实现

#include "roundbutton.h"
#include "ui_roundbutton.h"
#include <QPainter>#ifndef NO_TOUCH_EVENTRoundButton::RoundButton(QWidget *parent) :QWidget(parent),ui(new Ui::RoundButton)
{ui->setupUi(this);m_radius = 200;isPressed = false;setIcon(":/ppd.jpeg");#ifdef NO_TOUCH_EVENTconnect(this,&RoundButton::btnClicked,[=]{qDebug("Round button clicked.");setIcon(":/timo.jpg");});
#endif
}RoundButton::~RoundButton()
{delete ui;
}void RoundButton::setIcon(const QString &fileName)
{if(pixmap.load(fileName)){qDebug("load icon ok.");update();}
}void RoundButton::setRadius(int radius)
{m_radius = radius;
}#ifdef NO_TOUCH_EVENT
void RoundButton::mousePressEvent(QMouseEvent *event)
{Q_UNUSED(event)isPressed = true;
}void RoundButton::mouseMoveEvent(QMouseEvent *event)
{Q_UNUSED(event)}void RoundButton::mouseReleaseEvent(QMouseEvent *event)
{Q_UNUSED(event)if(isPressed){isPressed = false;emit btnClicked();}
}
#endifvoid RoundButton::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)QPainter painter(this);//抗锯齿painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);//绘画路径QPainterPath path;path.addEllipse(this->rect().center(),m_radius,m_radius);painter.setClipPath(path);//绘图painter.drawPixmap(QRect(0,0,m_radius*2,m_radius*2),pixmap);}

QPainterPath是一个图形构建块的对象,如矩形、椭圆、直线和曲线。构建块可以加入在封闭的子路径中,例如:矩形或椭圆形。一个封闭的路径同时存在开始点和结束点。或者作为未封闭的子路径独立存在,如:直线和曲线。
addEllipse在指定的边框矩形内创建椭圆,并将其作为闭合子路径添加到绘制路径。
椭圆由一条顺时针的曲线组成,在零度(3点钟位置)开始和结束。

最后通过drawPixmap把图片画出来。本示例中打开 NO_TOUCH_EVENT 宏可作为圆形按钮使用,关闭就仅作为圆形头像使用。

当然了还可以使用painter的drawRoundedRect来实现圆形的绘画。这个有兴趣的可以自行研究。

实验效果


本示例代码稍作修改即可运用到工程中,灵活性也比较高。

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

Qt自定义控件之圆形按钮、圆形头像相关推荐

  1. 自定义控件之自定义圆形头像

    自定义头像在app应用中应用较为广泛,定义一个类,继承ImageView,重写三个有参构造 public class Image extends ImageView { Paint paint; pr ...

  2. java圆形头像上传_Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码...

    ** *圆形ImageView,可设置最多两个宽度不同且颜色不同的圆形边框.*设置颜色在xml布局文件中由自定义属性配置参数指定*/ public class RoundImageView exten ...

  3. 如何用Qt抠一个圆形头像出来

    如题,如何使用Qt抠一个圆形头像出来? 先来看效果: 首先加载一张图片,显示一个透明圆形,圆形外半透明,滚动鼠标滚轮,圆形区域变大变小. 鼠标按下可以拖动图片移动,来选定要截取的图片位置,按下&quo ...

  4. Qt实现圆形头像,支持Url和本地图片

    Qt实现圆形头像,支持Url和本地图片 前言 一.效果演示 二.源代码 三.使用示例 前言 支持显示远程url请求过来的图片数据,需要对应的ssl动态库 支持显示本地图片. 一.效果演示 二.源代码 ...

  5. QT绘图:旋转的圆形头像

    酷狗手机版播放音乐的时候在播放按钮上面会显示一个旋转的歌手圆形头像,现用qt绘制窗口来实现这一功能. 1.首先是画圆,因为不知道窗口大小,要根据窗口的宽高大小来确定. QPainter painter ...

  6. QT 圆形头像绘制方法

    QT 圆形头像绘制方法 目标效果: 方法一: 将目标图像转换成圆形.根据图像得到圆形的Pixmap,再将pixmap绘制到label上. 这种方法的优点是不必在意绘制的label的形状是什么.相当于目 ...

  7. android mysql上传头像,Android自定义控件仿QQ编辑和选取圆形头像

    android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形. 首先我们要做一个处理图片的自定义控件,把传入的图片,经过用户选择区域,处理成一定的形状. 有的app是通过 ...

  8. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)

    现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一 个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片 ...

  9. Android 圆形头像/有外边框的圆形头像CircleImageView自定义控件使用详解

    现在很主流使用圆形头像,还要带边框的一个圆圈圈,自己做的项目里就有这样的需求,大大小小好多地方. 本着能懒则懒的原则,把使用详解总结出来,(PS:不是控件详解). 基本上可以拿来就用,注释我也添加的比 ...

最新文章

  1. 与图像处理、图像识别有关的学术机构或会议
  2. Linux入门(6)——Ubuntu16.04安装atom
  3. cisco 交换机vlan-trunk的配置详解及应用实例:
  4. C# Learning—Step By Step(9)
  5. 在App中获得MainFrame指针
  6. 透明色的rgb值是多少_一文掌握PPT主题色原理及使用技巧
  7. C语言成语设计第一次作业
  8. 【图像重建】基于matlab主成分分析图像压缩重建【含Matlab源码 1173期】
  9. opencv(二)图像像素提取及操作
  10. 虚拟机KALI2022.2下安装GVM
  11. 20145212 罗天晨 《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
  12. VMware Tools 详细安装教程及问题解决
  13. 王者荣耀:又一新皮肤登场,堪称惊艳 ,网友:三国‘天下无双’
  14. CTP下单与持仓查询
  15. 《游戏数据分析实战》总结思考
  16. 一个前端菜鸟的成长历程
  17. tr闭包_个人简历网页模板
  18. 微软遭解雇的明星员工:后悔没早点离开微软
  19. 软件危机的相关概念、背景、表现形式
  20. 高效减小肚腩、赘肉的方法

热门文章

  1. 模拟游戏中的装备强化过程
  2. SpringBoot @Validated注解实现参数校验
  3. 华为OD机试题 - 字母计数(JavaScript)
  4. 国外服务器为什么抽风
  5. python 基础复习二
  6. 电磁兼容 (EMC) 行业前景如何?
  7. 用idea创建maven项目,配置tomcat详解
  8. 新浪总编离职、搜狐财经势微,面对万千诱惑,财经垂直站点该取哪瓢
  9. 铂金1:探本溯源-为何说Lock接口是Java中锁的基础
  10. 怎么把电脑硬盘文件恢复回来?跟着我这么做