QT获取物理尺寸,DPI

本文介绍了如何在QT5中通过LinuxFB平台设置屏幕分辨率,重点讲解了使用`mmsize=24x24`参数,并展示了获取屏幕物理像素密度和尺寸的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <QScreen>
    qreal x,y,dpi;
    dpi = QGuiApplication::screens().at(0)->physicalDotsPerInch();
    x = QGuiApplication::screens().at(0)->physicalDotsPerInchX();
    y = QGuiApplication::screens().at(0)->physicalDotsPerInchY();
    QSizeF rec = QGuiApplication::screens().at(0)->physicalSize();
    qreal  rec_w = rec.width();
    qreal  rec_h = rec.height();
    printf("screen physicalDotsPerInch:%f\n", (float)dpi);
    printf("screen physicalDotsPerInchX:%f\n", (float)x);
    printf("screen physicalDotsPerInchY:%f\n", (float)y);
    printf("screen physicalSize w:%f h:%f\n", (float)rec_w, (float)rec_h);

QT5 配置mmsize

QT_QPA_PLATFORM="linuxfb:fb=/dev/fb1:mmsize=24x24"

<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、付费专栏及课程。

余额充值