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 Criteria用法大全
    hibernate数据库操作基础
    Hibernate中Session.get()方法和load()方法的详细比较
    3hibernate核心对象关系映射 xxx.hbm.xml
    2.Hibernate的主配置文件hibernate.cfg.xml
    PHP Switch 语句判断成绩
    PHP页面显示中文字符出现乱码
    windows7下GithubDesktop和极域学生客户端冲突导致无法正常打开解决方案
    关于js特效轮播图练习
    Docker报错总结
  • 原文地址:https://www.cnblogs.com/findumars/p/5364689.html
Copyright © 2011-2022 走看看