2017-02-01 2 views
0

텍스트 편집과 qicon을 하나의 창에 추가했습니다 (플로팅 편집이라고 함).
저는 2 개의 qicons를 가지고 있습니다 - 보통의 DPI (16 x 16 아이콘)와 2x 버전 (32 x 32)입니다.
이름은 정확합니다. icon.png 및 [email protected]와 같습니다.
내 아이콘에서 pixmap을 가져 와서 제 3 자 라이브러리로 가져와야합니다.
qicon을 직접 먹이지 않아 qpixmap이 내 qt 버전 (5.6.2)에서 dpi를 존중하지 않으므로 dpi를 기준으로 변환해야합니다.
여기 내 코드입니다 :
QIcon은 항상 2x dpi로 표시됩니다.

// ... 
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> 

문제 난 항상 32 만 크기 가변 점의 dpi의 해상도와 동일 w 및 h를 얻을 수 있으며 100 % dpi의 경우 × 16 (16)을 반환의 경우 32 X 32 200 %.
누구든지 그 문제를 도와 줄 수 있습니까?

+1

부동 소수점을 비교하는 데'=='연산자를 사용하면 오류가 발생합니다. –

+0

pFloatingEdit-> window() -> devicePixelRatio()는 int를 반환합니다. QPaintDevice에서 devicePixelRatio를 호출합니다. –

+0

픽셀 비율이 다른 두 대의 모니터가 있습니까? (하나의 망막과 하나의 망막이 아닌?) – 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); 
관련 문제