【问题标题】:Qt: Longer term adaption to run Application unmodified/independent of Display ResolutionQt:长期适应未修改/独立于显示分辨率运行应用程序
【发布时间】:2020-01-21 08:43:42
【问题描述】:

我正在浏览Qt 网站上的High Dpi 信息。我基本上有一个旧应用程序需要在High DPI 触摸屏显示器上运行。每个图标看起来都很小。我想计划设置一些环境变量和 setAttributes 以使我的应用程序能够在最短的时间内工作。但是,我遇到了上面链接的最后一行:

从长远来看,应用程序应该适合在未经修改的情况下运行:

  1. 始终使用 QPainter 绘图 API 的 qreal 版本。
  2. 根据屏幕大小调整窗口和对话框的大小。
  3. 将布局和绘图代码中的硬编码大小替换为根据字体指标或屏幕大小计算得出的值。

我无法理解如何在QSS 中实现最后一点,因为字体大小不能以百分比来设置。请帮助我理解它。

【问题讨论】:

    标签: c++ qt layout qtstylesheets


    【解决方案1】:

    实际上,我认为这与样式表无关。你引用的是migration of existing applications

    最后一句是第二句的延伸。


    假设您有硬编码的值(因此已固定)来定义窗口、小部件、布局等的大小......并且有一天您想将屏幕更改为具有不同分辨率、大小和 dpi 的另一个屏幕, ... 那么您的硬编码值可能无法适应,因此会破坏您的显示。

    要修复它并使您的应用程序可移植,您需要根据屏幕规格定义相对于某些东西的尺寸。字体指标也是如此。

    因此,例如,当您定义自定义小部件的 sizeHint()(如果需要)时,不要返回绝对/硬编码值,而是返回与父容器、屏幕几何图形相关的值, ...无论您想要什么,都将在另一个硬件/平台设置上动态调整。尽可能多。

    Qt 提供了获取实际屏幕几何图形的方法,例如QDesktopWidget()::screenGeometry()

    例如,如果要定义主窗口大小,可以这样写:

    // Assuming that MainWindow inherits QMainWindow
    
    MainWindow::MainWindow
    {
        resize(QApplication::desktop()->screenGeometry().width()/2, QApplication::desktop()->screenGeometry().height()/2);
    
        // ...
    }
    

    MainWindow 对象现在将具有屏幕大小的一半,无论屏幕是什么。


    编辑:对于字体大小,任何默认构造的QFont 都已适应系统首选大小。请参阅以下 SO 线程:How do you get the system default font size in Qt

    【讨论】:

    • @abhiarora 默认构造的QFont 已经适应系统首选大小。但是如果你真的想手动指定它,因为你想创建环境变量,你可以创建一个包含你想要的点大小并将它传递给QFont构造函数或使用setPointsize()
    • 我想知道是否可以在 QSS 文件中指定它并读取样式表并将字体大小更改为缩放大小。
    • @abhiarora 在reference documentation about stylesheets 中,您有一个font,特别是font-size 属性,可以从您的qss 文件中设置它。但我不知道如何从像 qss 这样的描述文件中计算相对大小,除非通过 QWidget::setStyleSheet() 从代码中重新定义。
    • @abhiarora 从代码中,您可以读取 qss 文件,然后通过执行以下操作添加所需的字体大小:my_widget->setStyleSheet(my_widget->styleSheet().append("MyWidget {font-size: the_value_you_want;}")); 但不要在qss 文件,您将使用所需值从代码中完成样式表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多