获取屏幕尺寸

[UIScreen mainScreen].applicationFrame;//获取屏幕尺寸

[[UIScreen mainScreen] bounds];//获取屏幕分辨率

<think>我们使用Qt的QScreen类来获取屏幕尺寸。通常,我们可以通过QApplication::screens()获取屏幕列表,然后获取每个屏幕的尺寸。 有两种常用的尺寸:一种是屏幕的物理尺寸(以毫米为单位),另一种是分辨率(以像素为单位)。这里我们主要关注分辨率。 另外,我们还可以获取屏幕的可用尺寸(即除去任务栏等系统界面后的尺寸)。 以下是一个示例,展示如何获取屏幕(或所有屏幕)的尺寸。 步骤: 1. 创建QApplication对象(如果已有应用对象则直接使用)。 2. 获取屏幕列表,或者使用primaryScreen()获取屏幕。 3. 调用屏幕对象的geometry()获取包括位置在内的整个屏幕的矩形(以像素为单位),使用size()可以获取尺寸。 4. 调用availableGeometry()获取可用区域的矩形,同样可以用size()获取可用尺寸。 注意:在Qt中,屏幕信息是通过QScreen类提供的。在创建QApplication之后,我们就可以获取屏幕信息。 示例代码(假设我们有一个Qt应用程序):</think>在Qt中获取屏幕尺寸,可以使用`QScreen`类提供的接口。以下是详细解决方案: ### 解决方案代码 ```cpp #include <QApplication> #include <QScreen> #include <QDebug> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 获取屏幕 QScreen *primaryScreen = QApplication::primaryScreen(); // 获取完整屏幕尺寸(包括系统任务栏区域) QRect fullScreenGeometry = primaryScreen->geometry(); qDebug() << "Full Screen Size:" << fullScreenGeometry.size(); qDebug() << "Full Screen Position:" << fullScreenGeometry.topLeft(); // 获取可用屏幕尺寸(排除系统任务栏) QRect availableScreenGeometry = primaryScreen->availableGeometry(); qDebug() << "Available Screen Size:" << availableScreenGeometry.size(); qDebug() << "Available Screen Position:" << availableScreenGeometry.topLeft(); // 获取屏幕DPI信息 qDebug() << "Logical DPI:" << primaryScreen->logicalDotsPerInch(); qDebug() << "Physical DPI:" << primaryScreen->physicalDotsPerInch(); return 0; // 实际应用中通常启动事件循环 app.exec() } ``` ### 关键代码解释: 1. **获取屏幕对象**: ```cpp QScreen *primaryScreen = QApplication::primaryScreen(); ``` `QApplication::primaryScreen()` 返回用户设置的主屏幕对象 2. **获取完整屏幕尺寸**: ```cpp QRect fullScreenGeometry = primaryScreen->geometry(); ``` - `geometry()` 返回包含系统任务栏/菜单栏的完整屏幕矩形 - 通过`.size()` 获取尺寸(`QSize`对象),`.width()`/`.height()` 获取具体数值 - 通过`.topLeft()` 获取屏幕在虚拟桌面坐标系中的位置 3. **获取可用屏幕尺寸**: ```cpp QRect availableScreenGeometry = primaryScreen->availableGeometry(); ``` - 排除系统任务栏、菜单栏等保留区域 - 适合作为应用程序窗口的最大化区域 4. **DPI信息获取**: ```cpp primaryScreen->logicalDotsPerInch() // 系统缩放后的逻辑DPI primaryScreen->physicalDotsPerInch() // 物理设备实际DPI ``` ### 多显示器支持 要获取所有屏幕信息: ```cpp QList<QScreen*> screens = QApplication::screens(); for (QScreen *screen : screens) { qDebug() << "Screen:" << screen->name(); qDebug() << " Size:" << screen->geometry().size(); } ``` ### 实际应用场景 ```cpp // 创建全屏窗口 QWidget widget; widget.setGeometry(primaryScreen->geometry()); // 创建最大化但不遮挡任务栏的窗口 QWidget widget; widget.setGeometry(primaryScreen->availableGeometry()); ``` ### 注意事项 1. **初始化要求**:必须在`QApplication`实例化后调用 2. **坐标系统**:多显示器时所有屏幕共享同一虚拟坐标系 3. **DPI缩放**:使用`logicalDotsPerInch()`处理高清屏缩放 4. **动态变化**:监听`QEvent::ScreenChangeInternal`事件处理屏幕热插拔
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值