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的边缘有锯齿