Qpushbutton上的圆形图标

时间:2016-04-13 11:34:48

标签: c++ qt qpixmap qpushbutton

我有QPushButton我要添加一个带圆角的图标(我使用QPushButton::setIcon()添加到按钮中)。但是我有一个pixmap,它是一个方形图像。是否有可能以一种圆形的方式调整像素图?

我在setMask()找到QPixmap函数,我可以使用它。但是,我如何创建一个掩盖我QPixmap的边缘的位图?

还是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这是您准备带圆角的QPixmap的方法:

const QPixmap orig = QPixmap("path to your image");

// getting size if the original picture is not square
int size = qMax(orig.width(), orig.height());

// creating a new transparent pixmap with equal sides
QPixmap rounded = QPixmap(size, size);
rounded.fill(Qt::transparent);

// creating circle clip area
QPainterPath path;
path.addEllipse(rounded.rect());

QPainter painter(&rounded);
painter.setClipPath(path);

// filling rounded area if needed
painter.fillRect(rounded.rect(), Qt::black);

// getting offsets if the original picture is not square
int x = qAbs(orig.width() - size) / 2;
int y = qAbs(orig.height() - size) / 2;
painter.drawPixmap(x, y, orig.width(), orig.height(), orig);

然后,您可以使用生成的像素图来设置QPushButton图标:

QPushButton *button = new QPushButton(this);
button->setText("My button");
button->setIcon(QIcon(rounded));

当然,您还可以选择使用某些图像编辑器预先准备带圆角的图像。