Transparent کردن تصویر در QPushButton - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

Transparent کردن تصویر در QPushButton

0 امتیاز
سلام .چطور میشه تصویری را که در QPushButton قرار میدم transparent باشه ؟آیا با تصویر bmp هم میشه Transparent نشان داد؟
سوال شده دی 21, 1393  بوسیله ی sailent (امتیاز 355)   16 44 59

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

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

 

پاسخ داده شده دی 28, 1393 بوسیله ی حامد مصافى (امتیاز 1,104)   2 3 12
انتخاب شد بهمن 14, 1393 بوسیله ی sailent
...