2017-01-17 55 views
8

Qt, varsayılan olarak, en yakın komşu enterpolasyonu veya çok benzer bir şey olan, Qt::FastTransformation görüntülerini çok basit, hızlı ve çirkin bir şekilde kullanır. Bir QPixmap ile uğraşırken Qt stillerinde arka plan görüntülerinin düzgün ölçeklendirmesi nasıl yapılır?

, bir resim, bir QPixmap nesnede değilse, örneğin, ne yapabiliriz Ancak

pixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation); 

, görsel daha iyi ölçeklendirme seçer, ancak bir basitçe bir arka plan olabilir düğme veya başka bir widget?

Örneğin, aşağıdaki düzenleri ve setStretch() birlikte kullanılan bir çözünürlükten bağımsız uygulama için uygun bir otomatik yeniden boyutlandırma, tamamen özelleştirilmiş renkli oluşturmak çok basit bir yöntemdir.

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 stil sayfalarında border-image yerine nedeniyle a deficiency background-image kullandı.

Stil sayfalarında kullanılan resimlerle nasıl daha düzgün bir ölçekleme yapabilirim?

Aynı şeyi pixmap'lerle uygulamak daha az zariftir. Yeniden boyutlandırma olaylarını her zaman yakalamak, tüm widget'lerimin yeni boyutlarını yeniden derlemek ve el ile yeniden boyamak zorunda kalacağım.

Düzenleme: büyütülüyor ise, ancak daraltılır değilken

İlginçtir, pürüzsüz ölçekleme stil ile çalışır.

Aşağıdaki örnekte, ilk satırda, 32 * 32 simgesi kullanılır ve ikinci sırada, 2000 * 2000'den büyük bir düzgün ızgara.

example

+1

Bir örnek hazırladım: [example] (http://i.imgur.com/Qz79kXP.png). Soldaki, QPushButton StyleSheet yaklaşımınız. Orta _SmoothTransformation_ ile bir QPixmap ve doğru olan _FastTransformation_ ile başka bir QPixmap. Orijinal ok görüntüsü, 128x128 boyutunda bir resimdir. Örneğimde görebildiğim kadarıyla, yaklaşımınızın görüntülerde düzgün bir ölçeklenme olduğu görünüyor. Belki bir şey özlüyorum. – jgorosdev

+0

@jgorosdev: İlginç bir şekilde, görüntüyü büyütürken pürüzsüz ölçeklendirme kullanılır, ancak daha küçük boyutlarda değil. – vsz

cevap

1

Dahili olarak, Qt stilleri çizmek için QPainter kullanır ve QPainter ölçekli pixmaplere çizim doğrusal interpolasyon kullanır. Bu, aşağı ölçeklendirme faktörü yeterince küçük olduğunda, kalite açısından büyük bir dezavantaja sahiptir, örneğin bakınız this bug report. En iyi kalite için, arka plan kaynağı görüntüsü her zaman hedef boyutun [0,5, 2,0] faktörü dahilinde olmalıdır. AFAICT bu sınırlamanın dışında kolay bir yol yoktur.