默認情況下,Qt使用非常簡單,快速和難看的方式縮放圖像,Qt::FastTransformation
,可能是最近鄰居內插或非常相似的東西。如何在Qt樣式中平滑縮小背景圖片?
當與QPixmap
處理,可以選擇在視覺上更好地縮放,例如,
pixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation);
然而,我們能做些什麼,如果圖像是不是在一個QPixmap
對象,而只是一個背景按鈕,還是其他一些小部件?
例如,當與佈局和setStretch()
一起使用時,以下是創建自動調整大小,完全自定義按鈕的非常簡單的方法,非常適合獨立於分辨率的應用程序。
ui->pushButton->setStyleSheet(
"QPushButton { border-image: url(:/img/button.png) 0 0 0 0 stretch stretch; }"
"QPushButton:checked { border-image: url(:/img/button_checked.png) 0 0 0 0 stretch stretch; }"
"QPushButton:pressed { border-image: url(:/img/button_pressed.png) 0 0 0 0 stretch stretch; }"
"QPushButton:checked:pressed { border-image: url(:/img/button_checked_pressed.png) 0 0 0 0 stretch stretch; }"
);
我在Qt的樣式表中使用border-image
代替background-image
由於a deficiency。
如何使用樣式表中的圖像更平滑地縮放?
使用pixmaps實現相同的功能要少得多。我必須總是捕捉調整大小的事件,重新計算我所有小部件的新大小,並手動重新繪製它們。
編輯:
有趣的是,平滑縮放與樣式表工作,如果該圖像被放大時,而不是當它被收縮。
在以下示例中,第一行使用32 * 32圖標,第二行使用大於2000 * 2000的均勻網格。
我舉了一個例子:[example](http://i.imgur.com/Qz79kXP.png)。 左邊是你的QPushButton StyleSheet方法。中間是帶有_SmoothTransformation_的QPixmap,右邊是帶有_FastTransformation_的另一個QPixmap。 原始箭頭圖像是一個128x128圖像。就我所看到的例子而言,您的方法似乎在圖像中具有平滑的縮放比例。也許我錯過了一些東西。 – jgorosdev
@jgorosdev:有趣的是,放大圖像時使用平滑縮放,但在縮小圖像時不使用平滑縮放。 – vsz