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

  • 相关阅读:
    cd 好吃的 收藏
    2011 无代码无意义…test 指针 v1
    转 云中漫步的 电子书 from simon
    2011无代码无意义 test_gets_scanf连用 等
    svn—relocate 的原因
    转 CString,string,char*的综合比较
    2011 无代码无意义 test_内存之 变量的边界 (图)
    转 解决"应用程序配置不正确,程序无法启动"
    转 删除已存在的SVN账户信息
    C#中IO类FileInfo和Directory操作实例
  • 原文地址:https://www.cnblogs.com/findumars/p/5364689.html
Copyright © 2011-2022 走看看