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图片,自己画)的更多相关文章

  1. 【转】这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. [转]这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 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; ...

  4. HTML用JS导出Excel的五种方法

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

    QT中获取选中的radioButton的两种方法   QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...

  6. ASP.NET,C#后台调用前台javascript的五种方法

    C#后台调用前台javascript的五种方法 由于项目需要,用到其他项目组用VC开发的组件,在web后台代码无法访问这个组件,所以只好通过后台调用前台的javascript,从而操作这个组件.在网上 ...

  7. java:JavaScript2:(setTimeout定时器,history.go()前进/后退,navigator.userAgent判断浏览器,location.href,五种方法获取标签属性,setAttribute,innerHTML,三种方法获取form表单信息,JS表单验证,DOM对象,form表单操作)

    1.open,setTimeout,setInterval,clearInterval,clearTimeout <!DOCTYPE> <html> <head> ...

  8. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  9. Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次

    [请尊重原创版权,如需引用,请注明来源及地址] > 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现 ...

随机推荐

  1. SUP (SAP Mobile SDK 2.2) 连接 Sybase SQL Anywhere sample 数据库

    安装了   SAP Mobile SDK 2.2   后发现,这个版本没有自带Sybase SQL Anywhere  数据库. 解决办法: 1. 免费下载 SQL Anywhere Develope ...

  2. GUI动态创建button

    #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_NS_CC_EXT; using ...

  3. JAVA ANDROID SOCKET通信检测(SERVER)连接是否断开

    Pre 解决思路 代码后记: 客户端app上的部分代码 调用: 服务器上: 客户端判断服务器是否还活着代码: PRE 在利用socket写通讯程序的时候,想检测服务器是否还活着. 从网上找了很多资料, ...

  4. C++自增和自减运算符(--和++)

    在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如:++i(在使用i之前,先使i的值加1,如果i的原值为3,则执行j=++i后,j的值为4)--i ...

  5. 基于visual Studio2013解决算法导论之007优先队列(堆实现)

     题目 优先队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #in ...

  6. poj3070 Fibonacci 矩阵快速幂

    学了线代之后 终于明白了矩阵的乘法.. 于是 第一道矩阵快速幂.. 实在是太水了... 这差不多是个模板了 #include <cstdlib> #include <cstring& ...

  7. 嵌入jetty到Java代码

    在做Demo实例时,使用的jetty版本号为8.x. 为了避免麻烦,将全部的包都导入到MyEclipse的lib文件夹下. 实例1:自己定义handler的服务器 package com.jetty. ...

  8. .NET vs JAVA

    一个同事写一个方案,让我补充下.NET和 JAVA语言的优缺点,以下是我的回复: 老X你好! 我觉得这个问题,本质上不是java和.net两个开发语言方面的比较,单纯从这两个开发语言来讲,部分伯仲,在 ...

  9. 用反射,将DataRow行转为Object对象

    /// <summary> /// 反射辅助类 /// </summary> public class ReflectionHelper { /// <summary&g ...

  10. UML01-概述

    1.UML中的泛化关系用什么符号表示? 2.UML的英文全称是什么? 3.UML图不包括流程图. 4.对一个重要的系统有时要用多个模型就才能充分描述.