bmp خیر. تصویر مورد نظر شما باید به فرمت دارای شفافیت (مثل QImage::Format_ARGB32) باشد.
مثال:
void MainWindow::initNumpadTexts()
{
QStringList numbers = QStringList()
<< "1| " << "2|ABC" << "3|DEF"
<< "4|GHI" << "5|JKL" << "6|MNO"
<< "7|PQRS" << "8|TUV" << "9|WXYZ"
<< "*|" << "0|+" << "#|";
setUiStatus(sipWrapperBase::LoggedIn);
for(int i = 0; i < numbers.count(); i++){
QString t1 = numbers.at(i).split("|").at(0);
QString t2 = numbers.at(i).split("|").at(1);
QImage img(56, 23, QImage::Format_ARGB32);
img.fill(Qt::transparent);
QPainter p(&img);
p.setRenderHint(QPainter::Antialiasing);
p.setBackgroundMode(Qt::TransparentMode);
p.setPen(qRgb(100, 100, 100));
QFont f;
f = p.font();
f.setFamily("Courier new");
f.setPixelSize(12);
f.setBold(true);
p.setFont(f);
if(!t2.isEmpty()){
QRect r2 = img.rect();
r2.setWidth(r2.width() - 3);
p.drawText(r2, Qt::AlignRight | Qt::AlignVCenter, t2);
}
QRect r1 = img.rect();
r1.moveLeft(3);
f = p.font();
f.setPixelSize(26);
f.setFamily("MS sans serif");
f.setBold(false);
p.setFont(f);
if(t2.isEmpty() || t2.isNull())
p.drawText(r1, Qt::AlignCenter, t1);
else
p.drawText(r1, Qt::AlignLeft | Qt::AlignVCenter, t1);
QList<QPushButton*> btns = findChildren<QPushButton*>(QString("pushButtonNumber%1").arg(i + 1));
if(btns.count() == 1){
QPushButton *btn = btns.at(0);
QPixmap pix = QPixmap::fromImage(img);
// pix.setAlphaChannel(pix);
btn->setIcon(QIcon(pix));
btn->setIconSize(img.size());
btn->setUserData(1, 0);
btn->setText("");
}
btns = findChildren<QPushButton*>(QString("toolButtonNumber%1").arg(i + 1));
if(btns.count() == 1){
QPushButton *btn = btns.at(0);
QPixmap pix = QPixmap::fromImage(img);
// pix.setAlphaChannel(pix);
btn->setIcon(QIcon(pix));
btn->setIconSize(img.size());
btn->setUserData(1, 0);
btn->setText("");
}
QString fn = QString("c:/numpad/numpad_%1.png").arg(i);
img.save(fn, "PNG");
}
}