欢迎转载,请注明出处:https://blog.csdn.net/qq_39453936?spm=1010.2135.3001.5343
原文链接: https://blog.csdn.net/qq_39453936/article/details/120665562

Windows下获取屏幕分辨率

  • 获取多个显示屏幕的分辨率
  • 获取主屏幕分辨率
  • Qt获取多个屏幕分辨率

获取多个显示屏幕的分辨率

  • 获取屏幕缩放后的逻辑分辨率

    BOOL CALLBACK EnumMonitor(HMONITOR handle, HDC hdc, LPRECT rect, LPARAM param) {std::vector<MONITORINFO> *list = (std::vector<MONITORINFO>*)param;MONITORINFO mi;mi.cbSize = sizeof(mi);GetMonitorInfo(handle, &mi);qebug()<<"is MONITORINFOF_PRIMARY:" << mi.dwFlags;list->push_back(mi);return true;
    }int main(int argc, char *argv[])
    {int numbers = GetSystemMetrics(SM_CMONITORS);std::vector<MONITORINFO> monitor_list;EnumDisplayMonitors(NULL, NULL, EnumMonitor, (LPARAM)&monitor_list);for (size_t i = 0; i < monitor_list.size(); ++i) {qebug()<<"width:"<<(monitor_list[i].rcMonitor.right - monitor_list[i].rcMonitor.left);qebug()<<"height:"<<(monitor_list[i].rcMonitor.bottom - monitor_list[i].rcMonitor.top);}
    }
    
  • 获取当前屏幕的物理分辨率

    RECT GetScreenRect(int screen) {DISPLAY_DEVICEW device;device.cb = sizeof(device);BOOL result = EnumDisplayDevicesW(NULL, screen, &device, 0);DEVMODEW device_mode;device_mode.dmSize = sizeof(device_mode);device_mode.dmDriverExtra = 0;result = EnumDisplaySettingsExW(device.DeviceName, ENUM_CURRENT_SETTINGS, &device_mode, 0);int x = device_mode.dmPosition.x;int y = device_mode.dmPosition.y;int width = device_mode.dmPelsWidth;int height = device_mode.dmPelsHeight;return { x, y, x + width, y + height };
    }int main(int argc, char *argv[])
    {int numbers = GetSystemMetrics(SM_CMONITORS);for (int i = 0; i < numbers; ++i) {auto size = GetScreenRect(i);qebug()<<"width:"<<(size.right - size.left);qebug()<<"height:"<<(size.bottom - size.top);}
    }
    

获取主屏幕分辨率

注意:需要在QApplication构造后调用

//获取屏幕缩放后的逻辑分辨率,也可以通过GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取auto hMonitor = MonitorFromWindow(GetDesktopWindow(), MONITOR_DEFAULTTONEAREST);MONITORINFOEX miex;miex.cbSize = sizeof(miex);GetMonitorInfo(hMonitor, &miex);qreal cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left);qreal cyLogical = (miex.rcMonitor.bottom - miex.rcMonitor.top);// 获取当前屏幕的物理分辨率DEVMODE dm;dm.dmSize = sizeof(dm);dm.dmDriverExtra = 0;EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm);qreal cxPhysical = dm.dmPelsWidth;qreal cyPhysical = dm.dmPelsHeight;//获取缩放比例qreal xdpi = cxPhysical/cxLogical;qreal ydpi = cyPhysical/cyLogical;qreal dpi = (xdpi+ydpi)/2;

Qt获取多个屏幕分辨率

//获取可用桌面大小
QRect deskRect =  QApplication::desktop()->availableGeometry();
//获取设备屏幕大小
QRect screenRect =  QApplication::desktop()->screenGeometry();
//获取系统设置的屏幕个数(屏幕拷贝方式该值为1,只有设置成扩展时才返回多个)
int g_nScreenCount = desktopWidget->screenCount();  //获取该主机显示器列表(屏幕拷贝方式该值为1,只有设置成扩展时才返回多个)
QList<QScreen *> list_screen = QGuiApplication::screens();
for (int i = 0; i < list_screen.size(); i++)
{QRect rect = list_screen.at(i)->geometry();int desktop_width = rect.width();int desktop_height = rect.height();qDebug() << desktop_width <<desktop_height;
}

参考文章:https://blog.csdn.net/yp18792574062/article/details/88365965
小白发文,欢迎指正

Qt - 获取屏幕分辨率相关推荐

  1. Qt界面制作(QSS、获取屏幕分辨率、自定义控件、版权)

    源码下载地址: https://download.csdn.net/download/qq78442761/10534055 程序运行截图: 程序版权 程序结构图如下: 主要就几点: 1.QSS 2. ...

  2. Android的单位px,pt,dp,sp总结和获取屏幕分辨率

    px: pixels(像素). 是屏幕中可以显示的最小单位元素,px是设备密度有关的,不同设备显示效果不同.因为由于不同的设备密度不同,密度就是单位英寸的像素不同,在不同的手机上显示的大小就不同 pt ...

  3. C#获取屏幕分辨率(大小)

    using System.Windows.Forms;             获取屏幕分辨率            int SH = Screen.PrimaryScreen.Bounds.Heig ...

  4. IOS获取屏幕分辨率

    获取屏幕分辨率是个很有用的功能,尤其在一些游戏相关的开发中,图形的绘制与屏幕分辨率密不可分.得到当前屏幕的分辨率是必不可少的支持. 获取屏幕分辨率可以两步走 1.得到当前屏幕的尺寸: CGRect r ...

  5. Android手机获取屏幕分辨率高度因虚拟导航栏带来的问题

    大家都知道,Android系统在4.4(KITKAT)版本后,增加了更炫的交互,并且对于标题栏和状态栏也增加了可定制化,于此同时在获取手机分辨率的时候一些旧方法已经不那么好使了. 常用获取屏幕分辨率的 ...

  6. MATLAB获取屏幕分辨率

    1. 获取分辨率 本来设计程序按照1920x1080运行的,后面调了一下系统缩放,分辨率就变了,所以为了更灵活的使用,还是先获取再使用吧 matlab获取屏幕分辨率命令: get(0,'ScreenS ...

  7. Android kotlin工具类获取屏幕分辨率及宽高

    前言 获取屏幕相关工具DisplayUtil class DisplayUtil {companion object {/*** 获取屏幕宽度*/fun getScreenWidth(context: ...

  8. 使用GTK+获取屏幕分辨率并设置满屏显示效果

    在linux下,经常需要设置程序全屏显示,GTK+中提供了获取屏幕分辨率的方式,然后只要根据得到的宽高设置窗口显示大小,同时使用gtk_window_set_decorated去掉边框和标题栏显示,就 ...

  9. iphone中获取屏幕分辨率的方法

    iphone中获取屏幕分辨率的方法 CGRect rect = [[UIScreen mainScreen] bounds]; CGSize size = rect.size; CGFloat wid ...

  10. c++获取屏幕分辨率DPI以及屏幕放缩倍数

    c++获取屏幕分辨率DPI以及屏幕放缩倍数 参考示例 // 获取分辨率不准nScreenWidth = GetSystemMetrics(SM_CXSCREEN);nScreenHeight = Ge ...

最新文章

  1. 【Network Security!】Banner信息收集
  2. Vue.js-Day05【安装路由(vue-router)、如何使用vue-router、404配置、激活class、动态路由、编程式导航、路由嵌套、路由元信息、导航拦截】
  3. boost::math::tools::cohen_acceleration用法的测试程序
  4. java main方法调用非静态方法_java中main函数怎么调用外部非static方法
  5. flink报错:typeutils.CompositeType$InvalidFieldReferenceException Cannot reference field by field expre
  6. python内存管理 变量_Python变量内存管理
  7. WebPager For ASP.NET (基于ASP.NET的数据分页控件)
  8. win10 计算机 权限,介绍电脑windows10管理员权限开启的4种方法
  9. Windows 完成端口编程
  10. Python3 - 苹果ID登录App Sign in with Apple
  11. 安卓系统目录说明大全,各文件夹是什么,可以删除吗?(以MIUI为例)
  12. OA实施分析:OA系统选型警惕哪些陷阱
  13. pyftpdlib 创建ftpserver
  14. linux每天凌晨备份文件
  15. 『python思考』关于列表的浅复制和深复制的理解
  16. Java开发教程入门!数据库事务深入分析
  17. python迭代器是什么_python中什么是迭代器
  18. 神经网络的三种训练方法,神经网络常用训练方法
  19. <<视觉问答>>2022:SwapMix: Diagnosing and Regularizingthe Over-Reliance on Visual Context in VQA
  20. ROS中执行roslaunch后,显示功能包不存在的解决方法

热门文章

  1. 登顶多国免费榜,Zynga能否依靠超休闲游戏重回巨头行列
  2. 谷粒商城P46 gulimall-gateway刷新验证码出现503错误
  3. 黑莓BlackBerry 模拟器上浏览网页
  4. 关于-O0、O1、O2、O3优化
  5. 控制台版单机双人五子棋游戏(Java版)---新人小白
  6. deepin关机卡桌面_有了MyDock,我也有了一个MacBook桌面
  7. kdc服务器密码修改,kerberos之kdc主备
  8. java摄氏度转华氏度 在控制台输入
  9. Linux中启动Steam报错libGL error的解决办法
  10. Unity 图片字体制作