zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CentOS安装配置
    扩展多线程应用程序 CLR 和 线程
    OEA体验 :元数据编写
    字符串的逆序之旅
    学习之响应式Web设计:Media Queries和Viewports
    Windows Azure Virtual Machine Role (4) 在VHD中安装需要的功能
    java开发web service快速入门(视频)
    淘宝技术发展(Java时代:脱胎换骨)
    Contoso 大学 使用 EF Code First 创建 MVC 应用
    负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念网络基础
  • 原文地址:https://www.cnblogs.com/findumars/p/5364689.html
Copyright © 2011-2022 走看看