qt button以及label实现不规则图形

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

时间: 2024-10-26 12:06:23

qt button以及label实现不规则图形的相关文章

Qt make clickable label 制作可点击的Label控件

Qt中的Label标签控件的作用绝不仅仅限于显示静态文本,其实它的功能很强大,由于其有setPixmap()成员函数,故而可以当显示图片窗口使用,而且还可以实时显示摄像头捕获的图片,然后它对鼠标事件的支持却没有QWidget那样强大,很多时候我们想要QLabel捕获鼠标单击或双击的事件,它本身无法实现,我们只好写一个新的class来实现我们需要的功能,这也是C++的强大之处所在,继承特性可以让我们在原有的基础上无限增加新的特性.那么这里我们想要QLabel捕获鼠标的双击事件,我们需要新建一个类名

java====color、font、button、label、textfield、textarea使用

1. Color类 µ 公共静态属性:共13个静态属性,分别代表13种不同的颜色常量. µ 构造函数 ü public Color(int r,int g,int b):以整数形式给出红.绿.蓝三个分量的值,每个分量的范围:0~255 ü public Color(float r,float g,float b):r.g.b均为单精度浮点数.取值范围为0.0f~1.0f ü public Color(int rgb):rgb的16~23位:红色分量:0~7位:蓝色分量,8~15位:绿色分量. 2

程序日志--ios“文字长度--button与label的交互”程序

我的学习日志003:"文字长度--button与label的交互"程序 交代一下我做程序的工具:mac os x虚拟机10.9.3         Xcode6         百度^-^         参考书iPhone30天精通(本书已经过时,但是还有一定的参考价值,可以引导正确的学习方向). 没什么新的知识点,直接放步骤和代码. XCode新建SingleView程序,viewControllor.h代码如下: #import <UIKit/UIKit.h> #im

使用CSS 3创建不规则图形 文字围绕

前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中.本篇文章的目的是为大家开启它的冰山一角.我希望这篇文章能让你对不规则图形有一个初步的了解. 现在,我们已经可以使用CSS 3 常见不规则复杂图形了(点击链接查看),如下图所示: 使用CSS创建的图形,无法内置文字或实现文字环绕效果.因此,如何实现不规则图形和文字复杂布局也成为了一个热议话题. 今天我们就来介绍一下如何实现这个效果.文章中我们将阐述如何使用 CSS创建不规则图形,实现不规则的文本布局.学会如何创建不规则图形之后

(转)第04节:Fabric.js用路径画不规则图形

在Canvas上画方形.圆形.三角形都是很容易的,只要调用fabric对应的方法就可以了,但这些都是规则的图形,如果你想画一个不规则的图形,这时候你可以用fabric.js提供的路径绘图方法.所谓路径绘图就是用点和线的移动的方式进行绘图.通过对 线.曲线.弧的应用你可以非常复杂的图形. 我们先来看一段的代码: var canvas = new fabric.Canvas('canvas'); var path = new fabric.Path('M 0 0 L 200 100 L 170 20

web前端入门到实战:css实现不规则图形的阴影(如对话框)

在日常开发中会使用带箭头的弹出对话框,有时为了美观或者突出,会添加一个阴影.由于图形不规则且可能是由多个元素拼接而成的,这样box-shadow属性可能不能满足需求.这里推荐一个类似的属性,filter下的drop-shadow. <div class="triangle"> </div> .triangle{ width: 200px; height: 60px; position: relative; filter: drop-shadow(0 0 5px

[切图]不规则图形的切法

把选中的两个图层连接起来,以后无论选不选中这两个图层,都可以直接把不规则图片拖走啦(选中图层,点击下面的链接标志,就可以把图层连接起来),如下图: PS小技巧: 点击图片选中图层前,记着做下面的噢:

点与不规则图形关系判断

1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=gbk"> 4 <title>img usemap属性</title> 5 </head> 6 <script> 7 8 function isPointInLine(point,linePoint1,linePoint2)

点击图片中不规则图形提示选中不同区域

如图所示,当点击不同区域做出不同提示首先制作背景图,然后将不同区域的图片单独截取下来,截取的楼层图必须和背景相同大,保证当所有图片重叠是是一样完整的图片背景图:楼层图: 1 如图所示,当点击不同区域做出不同提示 2 首先制作背景图,然后将不同区域的图片单独截取下来,截取的楼层图必须和背景相同大,保证当所有图片重叠是是一样完整的图片 3 背景图: 4 5 楼层图: 6 7 8 [java] view plaincopy 9 package com.bitcare.view; 10 11 impor