qt button以及label实现不规则图形(五种方法:使用QSS,设置Mask图片,自己画)
1、方法1:准备一张边界是透明的不规则图形
QPushButton * pbtn = new QPushButton;
pbtn->setStyleSheet("QPushButton{border:0px;}");//这句务必加上,否则看到的就是矩形了,而不是不规则图形了
pbtn->setText("aaa");
pbtn->setIcon(QPixmap("://louDong.png"));
pbtn->setIconSize(QPixmap("://louDong.png").size());
pbtn->resize(QPixmap("://louDong.png").size());
效果如下:
方法2:
QPushButton * pbtn = new QPushButton;
pbtn->setFixedSize(QPixmap("://louDong.png").size());
pbtn->setStyleSheet("border-image:url(://louDong.png)");
方法3:
QPushButton * pbtn = new QPushButton;
pbtn->setFixedSize(QPixmap("://louDong.png").size());
pbtn->setIcon(QPixmap("://louDong.png"));
pbtn->setIconSize(QPixmap("://louDong.png").size());
pbtn->setMask(QPixmap("://louDong.png").createHeuristicMask()); //不过该方法效果并不好,能看到button的边缘有锯齿,createHeuristicMask换成mask也是一样。
方法4:
继承qpushButton,重写paintevent,在里面可以设置mask或者通过qpainterPath自己构造不规则轮廓,代码如下:
//重绘事件,构造不规则图形
void DownloadMaskWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this); //创建painter
painter.setRenderHint(QPainter::Antialiasing, true); //消除锯齿效果
//构造painterpath
QPainterPath path;
path.moveTo(0, 0);
path.lineTo(DOWNLOAD_MASK_WIDTH, 0);
path.lineTo(DOWNLOAD_MASK_WIDTH/2, DOWNLOAD_MASK_HEIGHT);
path.lineTo(0, 0);
//path->setFillRule(Qt::WindingFill);
//设置无画笔,避免边框出现一条黑线
painter.setPen(Qt::NoPen);
//设置画刷
painter.setBrush(QBrush(QColor(36,169,225), Qt::SolidPattern));
//绘制背景
painter.drawPath(path);
event->accept();//不再向父类传递消息
}
方法5:
对于qlabel,pLabelUnInstallingIcon->setFixedSize(40,40);
pLabelUnInstallingIcon->setScaledContents(true);
pLabelUnInstallingIcon->setPixmap(QPixmap(iconPath));
这样,可以保证图片不失真,如果用pLabelUnInstallingIcon.setPixmap(QPixmap(iconPath).scaled(40,40))的话可以看到label的边缘有锯齿
http://blog.csdn.net/u013281495/article/details/50894096
qt button以及label实现不规则图形(五种方法:使用QSS,设置Mask图片,自己画)的更多相关文章
- 【转】这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- [转]这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式
先上代码 <script type="text/javascript" language="javascript"> var idTmr; ...
- HTML用JS导出Excel的五种方法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)
QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...
- ASP.NET,C#后台调用前台javascript的五种方法
C#后台调用前台javascript的五种方法 由于项目需要,用到其他项目组用VC开发的组件,在web后台代码无法访问这个组件,所以只好通过后台调用前台的javascript,从而操作这个组件.在网上 ...
- java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)
1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...
- Android之数据存储的五种方法
1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...
- Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次
[请尊重原创版权,如需引用,请注明来源及地址] > 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现 ...
随机推荐
- northern truck 是什么牌子?具体_百度知道
northern truck 是什么牌子?具体_百度知道 northern truck 是什么牌子?具体
- ARM标准汇编与GNU汇编
ARM标准汇编与GNU汇编 http://www.cnblogs.com/hnrainll/archive/2011/05/17/2048315.html
- Jquery学习笔记:操作form表单元素之一(文本框和下拉框)
一.概述 在web页面开发中,经常需要获取和设置表单元素的值(如文本框中的内容),特别是在ajax应用中,更是常态.本文系统的介绍下如何操作. 同操作其它html元素一样,操作的过程差不多. 第一步, ...
- C语言中 移位操作运算
移位规律: 左移时总是移位和补零.右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位后补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移.(其实跟扩展逻辑一样 ...
- 使用Xshell生成key,避免password登录linux
我们通常Xshell使用命令ssh user@ip远程登录linux,这将促使我们进入password更麻烦的,通缉免费password日志的话,我们可以生成相应的key.然后把遥控器server上, ...
- 解决java mail发送TXT附件被直接显示在正文中的问题
这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀 ...
- 原码、反码、补码和移码事实上非常easy
近期在备战软考,复习到计算机组成原理的时候,看到书中关于原码.反码.补码和移码的定义例如以下(n是机器字长): 原码: 反码: 补码: 移码: 看完这些定义以后,我的脑袋瞬间膨胀到原来的二倍!这样变态 ...
- EasyUI - Layout 布局控件
效果: Html代码: <div id="cc" class="easyui-layout" style="width: 600px; heig ...
- sql: PL/SQL proc
A PL/SQL block has the following structure: [DECLARE declaration_statements ] BEGIN executable_state ...
- http权威指南 telnet
对于winXP 1.先启动一个telnet程序连接到TCP服务器中. telnet www.joes-hardware.com 80 2.在连接上的TCP服务器的telnet程序窗口中同时按下 &qu ...