QT创建透明图片 简单好用解决方案

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");
}

想要做出更多元素的背景透明图片就在此基础上进行一定的改造就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值