2017-02-01 6 views
0

テキストエディット+ qiconを1つ追加したウィンドウがあります(私はFloating Editと呼んでいます)。
私は通常のDPI(16 x 16アイコン)と2xバージョン(32 x 32)の2つのqiconsを持っています。
名前は正しい - icon.pngと[email protected]のようなものです。
アイコンからピックスマップを取得し、サードパーティのライブラリにフィードする必要があります。
qiconを直接フィードすることはできません。qpixmapは私のQtバージョン(5.6.2)ではdpiを尊重しないので、dpiに関して変換する必要があります。ここ
は私のコードである:
QIconは常に2xdpiとして表示されます

// ... 
auto icon = QIcon(imageName); 
auto availSizes = icon.availableSizes(); 
auto size = pFloatingEdit->window()->devicePixelRatio() == 1 ? availSizes.first() : availSizes.last(); 

auto pxm = icon.pixmap(size); 
auto w = pxm.width(); 
auto h = pxm.height(); 
// ... <feeding to 3rd party> 

問題は、私はいつもwおよび32に等しい時間が、サイズ可変の点の解像度を取得し、の場合には100%のDPIおよび32×32の場合には16×16を返します200%。
誰もその問題で私を助けてくれませんか?

+1

浮動小数点数の比較に '=='演算子を使用するとnエラーです。 –

+0

pFloatingEdit-> window() - > devicePixelRatio()はintを返します。 QPaintDeviceからdevicePixelRatioを呼び出します。 –

+0

ピクセル比率が異なる2つのモニターがありますか? (1つの網膜と1つの非網膜?) – fbucek

答えて

1

自分でデバイスのピクセル比率を設定しようとしてください。

ピクセル比が異なる複数のモニタを使用する場合、QPixmapは正しく機能しません。たぶんあなたの問題です。なぜなら、QPixmapsのdevicePixelRatioは常にモニターから最高です。しかし、QWindowの情報は正しいです。したがって、QWindowのdevicePixelRatioの設定でこれを修正する必要があります。

auto icon = QIcon(imageName); 
int pixelRatio = pFloatingEdit->window()->devicePixelRatio(); 
auto pxm = icon.pixmap(size); 
pxm.setDevicePixelRatio(pixelRatio); 
関連する問題