Qt获取屏幕screen大小

屏幕

你的电脑桌面,会有一个“固定的 底栏”,比如 windows下的 底下的那个 长方形
你的widget运行( wid.show() ) 当你移动你的widget 和 系统的底栏 重合时, 你的widget 会被他 “挡住”!!
除非你可以使用: showFullScreen(), 这样 系统的底栏 会被你挡住

获取屏幕尺寸

#include <QScreen>
QGuiApplication::primaryScreen()::size(); 返回[1920, 1080]
表示你电脑屏幕的 尺寸

QGuiApplication::primaryScreen()::geometry(); 返回[0, 0, 1920, 1080]
表示你电脑屏幕的 坐标系统(左上角是0,0坐标, 宽1920,高1080)

QGuiApplication::primaryScreen()->availableSize(); 返回[1920, 1040]
–表示你能用的 尺寸 (去除掉电脑固有部件后)–

常用QGuiApplication::primaryScreen()->availableGeometry(); 返回[0, 0, 1920, 1040]
–表示你能用的 区域 (去除掉电脑固有部件后)–
即,你可以设置你的widget.setGeometry(0, 0, 1920, 1040);

<think>好的,我现在需要帮助用户了解如何在Qt获取屏幕尺寸。用户可能是一个刚开始使用Qt的开发人员,想要了解如何获取屏幕信息来调整窗口大小或布局。首先,我得回忆一下Qt中相关的类和方法。 首先,Qt中处理屏幕信息的类应该是QScreen,它属于Qt GUI模块。QScreen类提供了访问屏幕属性,比如尺寸、分辨率等。然后,应用程序的主窗口通常与QGuiApplication或QApplication相关联,可以通过这些类获取屏幕信息。 用户可能需要的是整个屏幕的尺寸,或者是可用尺寸(除去任务栏等区域)。这时候需要区分screenGeometry和availableGeometry。记得screenGeometry返回的是屏幕的物理尺寸,而availableGeometry是可用的区域,排除了系统界面如任务栏。 接下来,需要确定如何获取当前屏幕的信息。如果应用程序有多个屏幕,可能需要遍历所有屏幕。但对于大多数情况,用户可能只需要主屏幕的信息。主屏幕可以通过QGuiApplication::primaryScreen()来获取。 然后,具体的代码示例应该怎么写呢?首先,确保包含了必要的头文件,比如<QGuiApplication>和<QScreen>。然后,在应用程序初始化之后,比如在main函数中创建QApplication之后,调用primaryScreen()方法,再使用geometry()或availableGeometry()获取相应的尺寸。 另外,用户可能想知道如何动态响应屏幕变化,比如外接显示器被拔掉的情况。这时候需要连接到QScreen的信号,比如geometryChanged(),但可能需要更详细的说明,不过用户的问题可能暂时不需要这部分,但可以简要提及。 还要注意多屏幕的情况,比如如何获取所有屏幕的信息。可以使用QGuiApplication::screens()来获取所有QScreen对象的列表,然后遍历它们获取每个屏幕的尺寸。 最后,需要检查代码的正确性,确保语法正确,比如使用正确的指针访问方式,正确的方法调用,以及确保在应用程序对象创建之后才调用这些方法,避免空指针错误。 总结一下,步骤大致是:获取QScreen对象,调用geometry()或availableGeometry(),然后提取width和height。给出代码示例,并解释各个方法的作用,同时提醒多屏幕的情况和动态变化的处理。</think>在Qt获取屏幕尺寸主要通过`QScreen`类实现。以下是详细步骤和示例: ### 方法一:获取屏幕尺寸 ```cpp #include <QGuiApplication> #include <QScreen> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); // 获取屏幕指针 QScreen *primaryScreen = QGuiApplication::primaryScreen(); // 获取完整屏幕尺寸(包含任务栏区域) QRect screenGeometry = primaryScreen->geometry(); int screenWidth = screenGeometry.width(); int screenHeight = screenGeometry.height(); // 获取可用屏幕尺寸(排除任务栏) QRect availableGeometry = primaryScreen->availableGeometry(); int availableWidth = availableGeometry.width(); int availableHeight = availableGeometry.height(); return app.exec(); } ``` ### 方法二:获取所有屏幕尺寸 ```cpp // 获取所有连接的屏幕 QList<QScreen*> screens = QGuiApplication::screens(); foreach(QScreen *screen, screens) { qDebug() << "Screen name:" << screen->name(); qDebug() << "Physical size:" << screen->physicalSize() << "mm"; qDebug() << "Resolution:" << screen->geometry(); } ``` ### 关键方法说明 1. **geometry()** - 返回屏幕的完整像素尺寸(包含系统保留区域) - 例如:$$ \text{1920×1080} $$ 2. **availableGeometry()** - 返回应用程序可用的屏幕区域 - 自动排除任务栏/系统栏 3. **physicalSize()** - 返回屏幕物理尺寸(单位:毫米) ### 动态响应屏幕变化 当屏幕配置发生变化时(如热插拔显示器),可以通过信号连接: ```cpp connect(qApp, &QGuiApplication::screenAdded, [](QScreen *screen){ qDebug() << "New screen connected:" << screen->name(); }); ``` ### 注意事项 1. 必须在`QGuiApplication`实例创建后才能获取有效屏幕信息 2. 多显示器系统中,每个显示器对应独立的`QScreen`对象 3. 高DPI屏幕需注意逻辑像素与物理像素的转换(使用`devicePixelRatio`) 建议在应用程序初始化时获取屏幕参数,用于窗口尺寸设置或布局计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值