デフォルトでは、Qtは非常にシンプルで素早く醜い画像スケーリングの方法を使用しています。Qt::FastTransformation
、おそらく最近隣の補間または非常に似たものです。Qtスタイルで背景画像をスムーズに縮小する方法は?
QPixmap
を扱う場合、1は、例えば、ただし
pixmap = pixmap.scaledToHeight(height, Qt::SmoothTransformation);
を視覚的に優れたスケーリングを選択することができ、画像がQPixmap
オブジェクトではなく、単にAの背景場合、我々は何を行うことができますボタン、または他のウィジェット?
たとえば、レイアウトと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スタイルシートでa deficiencyにborder-image
代わりのbackground-image
を使用。
スタイルシートで使用されている画像で、よりスムーズなスケーリングを行うにはどうすればよいですか?
pixmapsで同じことを実装することははるかに優雅ではありません。私はいつもサイズ変更イベントをキャッチし、すべての私のウィジェットの新しいサイズを再計算し、それらを手動で再描画する必要があります。
編集:画像を拡大している場合は、それを縮めているではないとき
は興味深いことに、スムーズなスケーリングは、スタイルシートで動作します。
次の例では、最初の行に32 * 32のアイコンが使用され、2番目の行には2000 * 2000より大きい均一なグリッドが使用されています。
私は例を挙げました:[例](http://i.imgur.com/Qz79kXP.png)。 左のものがQPushButtonスタイルシートのアプローチです。真ん中は_SmoothTransformation_を持つQPixmapで、右は_FastTransformation_を持つ別のQPixmapです。 元の矢印イメージは128x128イメージです。私の例で見る限り、あなたのアプローチはイメージのなめらかなスケーリングを持つようです。たぶん私は何かを見逃しています。 – jgorosdev
@jgorosdev:興味深いことに、スムーズなスケーリングはイメージを拡大するときに使用されますが、イメージを小さくするときは使用されません。 – vsz