qt標題,解決title的png圖片scaled後顯示有明顯鋸齒

Yzi321發表於2024-10-28

一、通用方法(使用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; 調整位置

效果對比

相關文章