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

  • 相关阅读:
    Hibernate 笔记 之 三 基础优化方面
    Hibernate 笔记 之 二 查询
    Hibernate 笔记 之 一 创建与配置
    hibernate初次配置及测试
    CentOS 7.3 安装MySQL--Java--Tomcat
    Spring AOP:自动注入参数值
    Spring AOP:实现Request信息获取
    IntelliJ IDEA导出项目文档
    IntelliJ IDEA:Shortcut Key
    iText生成PDF
  • 原文地址:https://www.cnblogs.com/findumars/p/5364689.html
Copyright © 2011-2022 走看看