QT创建透明图片 简单好用解决方案
开发过程中,经常需要使用各种图片来贴合界面。大公司一般有UI人员单独作图,很多小公司UI人员不稳定,或者很忙,你只需要改动很小的图片可能就会拖很久,所以做软件开发的人一般要自己拥有处理图片的能力。
windows下开发使用gdi+ ,gdi配合双缓冲使用DC 设置transparent就能做出各种需要的图片,拉伸或者缩小都很简单。当然这些在QT下就更容易了。
比如做一个透明背景的radiobutton背景图;
void createHolePicOwnerDraw()
{
QPixmap pix(30,30);
pix.fill(QColor(255,255,255,0));
QPainter painter(&pix);
// 高抗锯齿
painter.setRenderHints(QPainter::HighQualityAntialiasing);
QRect rt = pix.rect();
rt.setRect(rt.left()+1,rt.top()+1,rt.width()-2,rt.height()-2);
QPen pen(QColor(0x0B,0x0B,0xEB));
pen.setWidth(2);
painter.setPen(pen);
painter.drawEllipse(rt);
// 至此绘制出透明的30*30像素图片以及一个圆圈
pix.save("D:Test\\images11\\11.png");
rt.setRect(rt.left()+5,rt.top()+5,rt.width()-10,rt.height()-10);
QPainterPath path;
path.addEllipse(rt);
painter.fillPath(path,QBrush( QColor(240,240,240)));
painter.end();
// 至此给圆圈填充一个白点
pix.save("D:\\Work_Test\\TestWeb\\images11\\22.png");
}
也可以直接修改图片::
void createHolePicFromPic()
{
QPixmap pix(":/images/11.png");
QPainter painter(&pix);
painter.setRenderHints(QPainter::HighQualityAntialiasing);
QRect rt = pix.rect();
rt.setRect(rt.left()+5,rt.top()+5,rt.width()-10,rt.height()-10);
QPainterPath path;
path.addEllipse(rt);
painter.fillPath(path,QBrush( QColor(80,80,80)));
painter.end();
pix.save("D:\\Work_Test\\TestWeb\\images\\22.png");
}
创建一个多边形图片,COMBO的下拉图::
void MainWindow::createTringle16_16()
{
QPixmap pix(16,16);
pix.fill(QColor(255,255,255,0));
QRect rt = pix.rect();
QPainter painter(&pix);
painter.setRenderHints(QPainter::HighQualityAntialiasing);
QPolygon plg;
plg.append(QPoint(1,0));
plg.append(QPoint(15,0));
plg.append(QPoint(8,12));
QPainterPath path;
path.addPolygon(plg);
painter.fillPath(path,QBrush(QColor(0x2B,0x2B,0x2B)));
painter.end();
pix.save("D:\\Work_Test\\TestWeb\\images11\\55.png");
}
想要做出更多元素的背景透明图片就在此基础上进行一定的改造就可以。

1万+

被折叠的 条评论
为什么被折叠?



