QPixmap을 렌더링 캐시로 사용하고 있습니다. 스케일링 요인이 다른 여러 화면을 사용할 때 크기 문제가 발생합니다 (창에서 테스트).QPixmap을 렌더링 캐시로 사용할 때 올바른 GUI 크기 조정을 유지하십시오.
데모 용으로 작은 위젯을 작성했습니다. 그리기는 직접 또는 장치에 그린 QPixmap에서 수행 할 수 있습니다. 실제 응용 프로그램에서는 pixmap이 불필요한 paint() 호출을 방지하기 위해 캐싱됩니다. 경우에는 누군가가 전체 예제를 원하는 : https://github.com/the-yeti/qpixmap-scaling-demo
void RenderWidget::paintEvent(QPaintEvent *event)
{
if (m_usePixmap) {
QPixmap pm(width(), height());
paint(&pm);
QPainter(this).drawPixmap(0, 0, pm);
} else {
paint(this);
}
}
void RenderWidget::paint(QPaintDevice *pd)
{
QPainter p(pd);
p.fillRect(0, 0, pd->width(), pd->height(), QColor(192, 192, 192));
QFontMetrics fm = p.fontMetrics();
int h = fm.height();
for (int i=1; i<6; i++) {
p.drawLine(0, i*h, width(), i*h);
}
p.drawText(4, fm.ascent(), m_usePixmap ? "using QPixmap draw" : "using direct draw");
p.drawText(8, h+ fm.ascent(), QString("font pointsize: %1").arg(p.font().pointSize()));
p.drawText(8, 2*h + fm.ascent(), QString("font height: %1").arg(h));
p.drawText(8, 3*h + fm.ascent(), QString("physicalDpiY: %1").arg(pd->physicalDpiY()));
p.drawText(8, 4*h + fm.ascent(), QString("logicalDpiY: %1").arg(pd->logicalDpiY()));
}
이 데모를 위해, 나는 위젯 나란히 두 개의 인스턴스를 배치했습니다. 왼쪽은 직접 그려지고 오른쪽은 QPixmap을 사용합니다.
모든 모니터가 제대로 작동합니다. I는 다른 스케일링 여러 화면을 때
그러나 결과가 다르다. 직접 그리기는 현재 화면 해상도에서 올바르게 적용되고 렌더링됩니다. 픽스맵은 항상 기본 화면 해상도로 렌더링됩니다. 100 % 스케일링과 150 % 스케일링, 메인 화면과 보조 화면에
창 :
지금까지 그 이해할 수있다. Pixmap은 화면에 대해 알지 못하므로 기본 화면의 크기 조정을 사용하는 것이 합리적입니다. 내 질문은 지금 :
픽스맵 렌더링의 배율을 조정하는 방법이 있습니까?
Pixmap의 logicalDpiX/Y
을 수정해야한다고 생각합니다. 하지만 그것은 Qt 5.6.1에서 불가능한 것으로 보입니다.