一、通用方法(使用Qlabel)
// 新增視窗圖示
iconLabel = new QLabel(this);
QPixmap iconPixmap(":/ico.png"); // 替換成你的圖示檔案路徑
iconLabel->setPixmap(iconPixmap.scaled(125, 35, Qt::KeepAspectRatio, Qt::SmoothTransformation));
iconLayout->addWidget(iconLabel);
此時圖片會有鋸齒感
原因:
iconPixmap.scaled(125, 35, Qt::KeepAspectRatio, Qt::SmoothTransformation)
此程式碼的圖片是正常的,但是
iconLabel->setPixmap();
呼叫此函式後,顯示在QLabel中的實際大小會大於原來125*35的大小,所以會有鋸齒感
二、解決辦法
1、使用QToolButton
QImage iconImage(PNG_PATH); // 替換成你的圖示檔案路徑
// 縮放
float radio = 0.3;
float radioButton = 0.6;
int width = iconImage.width() * radio;
int height = iconImage.height() * radio;
toolButton = new QToolButton(this);
toolButton->setMinimumSize(width * radioButton, height * radioButton);
toolButton->setStyleSheet(".QToolButton{padding-left: -20px;padding-top: 7px;background: transparent;border: 0px;}.QToolButton:hover{background-color: transparent;}.QToolButton:pressed{background-color: transparent;}");
QIcon icon(std::move(QImage2QPixmap(iconImage.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation))));
toolButton->setIcon(icon);
toolButton->setIconSize(QSize(width * radioButton, height * radioButton));
// 設定按鈕的其他屬性(可選)
toolButton->setText("");
// 設定按鈕自動提升,使其在不可點選時呈現為灰顯
toolButton->setAutoRaise(true);
iconLayout->insertWidget(0, toolButton);
1、透過調整 radio 的調整本地png的縮放大小
2、透過調整 radioButton 的值來調整toolButton的大小
3、透過調整setStyleSheet中的 padding-left: -20px;padding-top: 7px; 調整位置