1、如果需要绘制的图比较少,可以直接使用样式表
ui->pbtn_hangding->setStyleSheet("background-image:url(:/img/背景图.bmp); "
"background-position:center center;"
"color:white; text-align:center bottom;");
2、如果项目已经设计好,或者图片较多希望抽出通用方法
// icon为已经设置了图片的变量,可以通过形参传递 , 也可以通过QPixmap 直接加载图片
QPixmap pixmap = icon.pixmap(76, 60);
QFont font; // QFont font("Microsoft YaHei");
font.setPointSize(12);
QFontMetrics fm(font);
QString text = "F2行定";
int x = (pixmap.width() - fm.width(text)) / 2;
int y = pixmap.height() - 5;
QPainter painter(&pixmap);
painter.setFont(font);
painter.setPen(Qt::white);
painter.drawText(x, y, text);
QIcon icon1;
icon1.addPixmap(pixmap);
ui->pbtn_hangding->setIcon(icon1);
1、2两种方法都可以实现文字覆盖显示在背景图上的效果(我的背景图是一个底色+图标的整体)
3、如果图标和文字是分开的,想要实现文字在图标的上下左右方向,并能控制间距,可以采用布局的方式
QLabel *iconLabel = new QLabel;
QLabel *textLabel = new QLabel;
iconLabel->setPixmap(QPixmap(":/img/行定1.bmp"));
textLabel->setText("F2行定");
QVBoxLayout *vlayout = new QVBoxLayout(); // 可以使用横向或纵向布局
vlayout->addWidget(iconLabel);
vlayout->addWidget(textLabel); // 可以通过setContentsMargins调整间距
ui->pbtn_hangding->setLayout(vlayout);