效果图:

Qt QPainter实现按钮添加半透明图片-风君雪科技博客

代码:

void InterfaceSwitch::paintEvent(QPaintEvent *)
{
    //实现带图片的半透明背景
    QPixmap covert_pixmap(str_image);//str_image是图片位置
    QPixmap pixmap(covert_pixmap.width(), covert_pixmap.height());
    pixmap.fill(Qt::transparent);

    QPainter painter_pixmap(&pixmap);
    QPoint start_point = this->rect().topLeft();
    QPoint end_point = this->rect().bottomRight();
//    qDebug()<<"pix.width="<<covert_pixmap.width()<<"pix.heigth="<<covert_pixmap.height();
//    qDebug()<<"topLeft="<<this->rect().topLeft()<<"bottomRight="<<this->rect().bottomRight();
    //QLinearGradient进行渐变色设置
    QLinearGradient linear_gradient(start_point, end_point);
    linear_gradient.setColorAt(0.5, QColor(255, 255, 255, 150));

    painter_pixmap.setRenderHint(QPainter::Antialiasing, true);//抗锯齿
    painter_pixmap.fillRect(this->rect(), QBrush(linear_gradient));//渐变色
    painter_pixmap.setCompositionMode(QPainter::CompositionMode_SourceIn);//复合模式
    painter_pixmap.drawPixmap(0, 0, covert_pixmap);

    QRect   rec = this->rect();
    rec.setX(rec.x()-6);
    rec.setY(rec.y()-6);
    painter_pixmap.drawText(rec, Qt::AlignCenter,"温度");//显示的文字
    painter_pixmap.end();

    QPainter painter2(this);
    painter2.drawPixmap(0, 0, pixmap);

}