Qt高清DPI下的显示,自适应分辨率

针对Qt要在windows高清DPI下进行显示,且相对于在分辨率下1920*1080上显示无异常,下面有几种方案:

方案1:使用配置文件qt.conf

在Qt配置文件qt.conf文件中进行配置,其中0,1,2对应Windows函数中的枚举变量,此种方案可以在DPI每次增加%25界面都会有相应的变化。详见Qt帮助文档 https://doc.qt.io/qt-5/highdpi.html

缺点:Qt界面会变得模糊,但不是很明显。

windows枚举变量,详见windows官方DPI

网址:https://docs.microsoft.com/zh-cn/windows/win32/api/shellscalingapi/ne-shellscalingapi-process_dpi_awareness

typedef enum PROCESS_DPI_AWARENESS {
  PROCESS_DPI_UNAWARE,
  PROCESS_SYSTEM_DPI_AWARE,
  PROCESS_PER_MONITOR_DPI_AWARE
} ;

  PROCESS_DPI_UNAWARE:此应用程序不会针对DPI更改进行缩放,并且始终假定比例因子为%100.它将由系统在任何其他DPI设置上自动缩放,会导致应用程序画面模糊。
  PROCESS_SYSTEM_DPI_AWARE:系统DPI识别。此应用程序无法扩展DPI更改。它将查询DPI一次,并在应用程序的生命周期中使用该值。如果DPI发生变化,则应用程序将不会调整为新的DPI值。当DPI从系统值更改时,系统将自动按比例放大或缩小,会使应用程序画面模糊,但比PROCESS_DPI_UNAWARE效果好。
  PROCESS_PER_MONITOR_DPI_AWARE:每个监视器DPI识别。此应用程序在创建DPI时检查DPI,并在DPI更改时调整比例因子。这些应用程序不会由系统自动扩展。设置后无效果。

使用方式:不需要写代码,只需添加资源配置文件qt.conf,路径必须为:/qt/etc/qt.conf

参数1对应上面枚举PROCESS_SYSTEM_DPI_AWARE

运行程序即可,qt会自动调用该配置文件

方案2:使用环境变量

缺点:Qt界面不会以DPI每增加%25而改变,而是以成倍的增加,例如%150,会增加2倍!

QT_AUTO_SCREEN_SCALE_FACTOR[boolean]根据显示器的像素密度启用自动缩放。这不会改变点大小字体的大小,因为点是物理度量单位。多个屏幕可能会有不同的比例因子。

qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");

使用方式:在QApplication声明前调用

方案3:设置highDpi属性

和设置环境变量情况类似,缺点也一样

小结:目前Qt尚未完全支持在完全不模糊且在每增加%25而进行改变界面的高DPI适配方案,希望能够帮到你。

  • 12
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 在Qt中,你可以使用布局管理器来实现窗口的自适应分辨率适配。 以下是一个例子: ``` #include <QApplication> #include <QVBoxLayout> #include <QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout *layout = new QVBoxLayout(&window); // 在这里,你可以添加各种控件到布局中 window.setLayout(layout); window.show(); return app.exec(); } ``` 使用布局管理器,你可以很容易地实现自动适配,因为它会自动调整控件的大小和位置,以适应窗口的大小变化。 有多种布局管理器可用,如QHBoxLayout、QVBoxLayout、QGridLayout等,你可以根据你的需求选择最合适的布局管理器。 ### 回答2: 在Qt中,可以通过使用布局管理器和窗口大小事件来实现窗口自适应分辨率适配。 首先,我们可以选择适合自己的布局管理器,如垂直布局(QVBoxLayout)或水平布局(QHBoxLayout),以便自动调整窗口中的控件位置和大小。 然后,我们需要在窗口的构造函数中设置布局管理器,并将所有的控件添加到布局管理器中。如下所示: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QVBoxLayout *layout = new QVBoxLayout; // 创建垂直布局管理器 QLabel *label = new QLabel("Hello, World!"); // 创建标签控件 layout->addWidget(label); // 将标签控件添加到布局管理器 QPushButton *button = new QPushButton("Submit"); // 创建按钮控件 layout->addWidget(button); // 将按钮控件添加到布局管理器 QWidget *centralWidget = new QWidget(this); // 创建一个主窗口控件 centralWidget->setLayout(layout); // 设置布局管理器为主窗口控件的布局 setCentralWidget(centralWidget); // 设置主窗口控件为窗口的中央控件 } ``` 接下来,需要监听窗口的大小事件,以便在窗口大小改变时重新布局控件。可以重写窗口类的`resizeEvent`函数,并在其中重新设置布局管理器的大小。如下所示: ```cpp void MainWindow::resizeEvent(QResizeEvent *event) { QMainWindow::resizeEvent(event); // 调用基类的 resizeEvent 函数 // 获取新的窗口大小 QSize newSize = event->size(); // 更新布局管理器的大小 centralWidget()->layout()->setGeometry(QRect({0, 0}, newSize)); } ``` 通过上述步骤,窗口的控件将会根据窗口的大小自动进行适配和调整。无论用户在不同的分辨率下打开窗口,控件都会根据界面的实际大小进行自适应。 这就是使用Qt实现窗口自适应分辨率适配的基本步骤。根据具体的需求,可以进一步调整布局管理器和控件的属性,以达到理想的自适应效果。 ### 回答3: 在Qt中,可以通过以下几个步骤来实现窗口自适应分辨率适配: 1. 获取当前屏幕的分辨率信息:可以使用QApplication类的primaryScreen()函数获取主屏幕的信息,然后使用QScreen类的geometry()函数获取屏幕的几何信息,包括宽度和度。 2. 设置窗口大小:根据获取到的屏幕信息,可以设置窗口的初始大小。可以使用QWidget类的resize()函数设置窗口的宽度和度,例如:widget->resize(screenGeometry.width() / 2, screenGeometry.height() / 2)。 3. 设置窗口位置:可以使用QWidget类的move()函数设置窗口的初始位置,通常将窗口居中显示。可以通过计算得到窗口在屏幕上的中心位置,例如:widget->move(screenGeometry.center() - widget.rect().center())。 4. 设置窗口的最大化和最小化策略:可以使用QWidget类的setWindowFlags()函数设置窗口的标志位,实现最大化和最小化功能。可以使用Qt::WindowMaximize和Qt::WindowMinimize标志位来实现最大化和最小化功能。 5. 监听窗口大小变化事件:可以通过重写QWidget类的resizeEvent()函数来监听窗口大小变化事件,根据实际需要做出相应的布局调整。 通过以上步骤,就可以实现窗口的自适应分辨率适配。在程序启动时,窗口将根据屏幕的分辨率设置初始大小和位置,并可以根据窗口大小的变化做出相应的布局调整,以适应不同分辨率的屏幕。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值