首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt:新闻部为什么减少对操作系统的扩展

Qt:新闻部为什么减少对操作系统的扩展
EN

Stack Overflow用户
提问于 2019-04-09 08:54:42
回答 1查看 712关注 0票数 1

我有一个Qt应用程序,我需要调整应用程序(缩放/缩小),因为显示设置中的操作系统发生了缩放的变化。

我从互联网上读到:

新闻部的标准设置为100% (96 DPI)、125% (120 DPI)和150% (144 DPI)

但是,当我从Qt应用程序中登录时,我会得到以下DPI值:

标度-物理新闻部X-物理新闻部Y

100% - 158,159

125% - 158,159

150% - 79,79

175% - 79,79

因此,根据上述值,应用程序文本大小对于100%和125%的标度没有差别。同样的行为适用于150%和175%。

下面是我使用的Qt代码:

代码语言:javascript
运行
复制
    #include <QWidget>
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QWidget  widget;
    qInfo() << "Hello Qt";
    int dpiX = widget.physicalDpiX();
    int dpiY = widget.physicalDpiY();
    qInfo() << dpiX;
    qInfo() << dpiY;

有人能指点一下吗?我试图实现的是,Qt应用程序的行为(更改应用程序大小/字体大小)取决于OS显示设置中的缩放设置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-09 09:25:37

我最初建议在这个答案中使用QWindow::devicePixelRatio()。但是,从QT5.12开始,这实际上还不能正常工作。Qt将避免因Qt的UI缩放实现中的错误而产生的比例比例。因此,对于125%,它仍将返回1.0缩放因子。在175%,它将返回2.0,而不是1.75。

所以现在,你应该回过头来询问新闻部。但是,查询逻辑DPI,而不是像现在这样查询物理DPI。将对physicalDpi()函数的调用替换为调用logicalDpi()函数。这将给您提供Microsoft Windows报告的96/120/144 DPI标准。

一旦Qt修复了错误,下面答案的前一部分就可以使用了。

以前的答案,一旦Qt修复了它们的缩放错误,就适用了。

直接查询缩放比率,不要试图从DPI推断它。您可以使用QWindow::devicePixelRatio()进行此操作。在100%缩放时,这将返回1.0。在125%的比例,它将返回1.25。诸若此类。因为这是一个缩放因子,所以您可以使用它作为您大小的乘数。

您应该在小部件当前所在的窗口上调用devicePixelRatio()。这是因为在多监视器设置上,不同的窗口可以显示在不同的显示器上。

小部件所在的窗口可以通过QWidget::windowHandle()获得。如果小部件不是窗口,则可以返回null。因此,您可能应该编写一个小助手函数,为小部件返回正确的DPR ()。它应该使用一个QWidget作为参数,如果windowHandle()为小部件返回null,那么沿着父树前进,对每个父树调用windowHandle(),直到找到第一个不返回null的父树。然后返回windowHandle()->devicePixelRatio()。这将是在该小部件中使用的正确的DPR。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55588776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档