MDGSF Software Engineer

[Qt] DPI支持

2016-03-24
Qt
   

win7 下修改dpi

win7 –> 控制面板 –> 显示 –> 设置自定义文本大小(DPI)

100% — 9磅 微软雅黑, 每英寸 96 像素

125% — 9磅 微软雅黑, 每英寸 120 像素

150% — 9磅 微软雅黑, 每英寸 144像素

200% — 9磅 微软雅黑, 每英寸 192 像素

百分比设置得越高,字体就越大

C++代码获取当前系统dpi

#define DEFAULT_DPI 96

HDC hdc = GetWindowDC(NULL);
if(NULL == hdc) {
    LOG_PRINTF(EError, EthDirect, "main() %d\n", GetLastError());
}

int iHorizes = GetDeviceCaps(hdc, HORZRES);  //当前设备横坐标的像素
int iVertres = GetDeviceCaps(hdc, VERTRES);  //当前设备纵坐标的像素
LOG_PRINTF(EInfo, EthDirect, "\niHorizes = %d\niVertres = %d\n", iHorizes, iVertres);

int iLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);  //当前设备横坐标每英寸的像素值
int iLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);  //当前设备纵坐标每英寸的像素值
LOG_PRINTF(EInfo, EthDirect, "\niLogPixelsX = %d\niLogPixelsY = %d\n", iLogPixelsX, iLogPixelsY);

double dScaleX = (double)iLogPixelsX / DEFAULT_DPI;
double dScaleY = (double)iLogPixelsY / DEFAULT_DPI;
LOG_PRINTF(EInfo, EthDirect, "\ndScaleX = %.3lf\ndScaleY = %.3lf\n", dScaleX, dScaleY);

在上面的代码中 dScaleXdScaleY 就是当前系统的dpi相对于100%dpi设置的比例。

只要把UI中的控件都相对应的放大或缩小这个倍数,UI就能够适应高清屏。


weixingongzhonghao

Comments

Content