Qt创建一个圆形按钮

Qt创建一个圆形按钮

  1. 使用qss创建一个圆形按钮以及它的问题
    按钮样式表
background-color:rgb(255, 0, 0);
border-radius:50px;
border-width:2px;
border-style:soild;
border:none;

出现的问题是。点击红色圆框外正方形框内的范围,依然可以触发clicked()槽。
解决的办法是通过Qwidget 的 setMask()接口
在这里插入图片描述
使widgetregion重合的部分变得可视。如果region包含widget之外的像素,将由平台决定是否那部分区域能够可视。注意:如果region是特别复杂这个效果会很慢。

未使用setMask()的图像

在这里插入图片描述

使用setMask()的图像

ui->pushButton->setMask(QRegion(0, 0, 100, 100, QRegion::Ellipse)); 

在这里插入图片描述
可以看出明显的锯齿,甚至都已经不像一个正常的圆了。
最后 网上搜了一下没有找到合适的解决方案,先插个眼。

  1. 使用qss border-imag 创建一个圆形的按钮。
    样式表
#pushButton_2
{
border-image:url(:/pic/buttonGood.png);
border:none;
}

要添加的代码

    QPixmap pix(":/pic/buttonGood.png");
    ui->pushButton_2->setMask(pix.mask());

效果图
在这里插入图片描述
出现的问题:此时按钮点击的效果仅在黑色区域有效。目前没有找到解决方案先插个眼

效果图很好没有图片变形或者锯齿之类的。但是在点击时相比于普通的按钮没有任何特效给用户的体验不是很好。如何给这种按钮添加上特效。
使用qss的伪状态
qss伪状态

/*
实现点击的效果
*/
#pushButton_2:pressed  
{
margin-left:2px;
margin-top:2px;   
}

默认的按钮在鼠标 hover 和 pressed两种情况会显示不同的特效。这种情况下使用伪状态 hover并不能达到理想的状态
qss代码

#pushButton_2
{
border-image:url(:/pic/buttonGood.png);
border:none;
}
#pushButton_2:hover
{
background-color:rgba(0, 200, 255, 0.5);
border:none;
}
#pushButton_2:pressed
{
margin-left:2px;
margin-top:2px;
}

参考文章

Qt完美实现圆形按钮

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值