HMI-7-[高分屏支持]:Qt 适配高分屏

简介: HMI-7-[高分屏支持]:Qt 适配高分屏

image.png

照例,还是先上效果图,宣传哈哈哈哈哈

image.png

今天学到一个新东西,就是Qt对高分屏的支持,即高DPI的支持,有个Qt写的软件在老板的SB2上运行出现了显示异常,因为老板的电脑分辨率是3000*2000 200的放大,导致软件不支持。所以在后面的软件中,需要对软件最高分屏支持,但是目前(5.10.0.版本)中,多高分屏的支持还是不是很完美呀。


这里需要注意,Qt是在5.6.0以后的版本才会支持高分屏的适配哈。


先说怎么搞



这个是没有加入高分屏适配的main.cpp文件

#include <QApplication>
#include <QDateTime>
#include "ControlPanel/controlpanel.h"
#include "Core/loader.h"
int main(int argc,char *argv[])
{
    QApplication a(argc,argv);
    Loader *loader = new Loader(":/Core/Resources/Core/LoaderImage.gif");
    loader->show();
    //装逼时刻放开
    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;
    do
    {
        now=QDateTime::currentDateTime();
        a.processEvents();
    }while (n.secsTo(now)<=1);
    ControlPanel controlPanel;
    controlPanel.show();
    loader->finish(&controlPanel);
    delete loader;
    return a.exec();
}

这个是加入了高分屏适配的main.cpp文件

#include <QApplication>
#include <QDateTime>
#include "ControlPanel/controlpanel.h"
#include "Core/loader.h"
int main(int argc,char *argv[])
{
  #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  #endif
    QApplication a(argc,argv);
    Loader *loader = new Loader(":/Core/Resources/Core/LoaderImage.gif");
    loader->show();
    //装逼时刻放开
    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;
    do
    {
        now=QDateTime::currentDateTime();
        a.processEvents();
    }while (n.secsTo(now)<=1);
    ControlPanel controlPanel;
    controlPanel.show();
    loader->finish(&controlPanel);
    delete loader;
    return a.exec();
}

其实就是加入了一句话 ,有用的就是其中的一句,剩下的检查版本兼容的。

 #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  #endif

还有就是最中重要的!!!


一定要写在“QApplication a(argc,argv);”的前面


一定要写在“QApplication a(argc,argv);”的前面


一定要写在“QApplication a(argc,argv);”的前面





这里引用下灿哥哥博客中的内容:原文链接:https://blog.csdn.net/caoshangpa/article/details/60965690


但是Qt5.6.0对高分屏的支持存在bug,在Surface Pro 4上亲测:



1.在无边框程程序setWindowFlags(Qt::FramelessWindowHint);下调用this->showMaximized();并不能实现最大化。



2.在使用QWebEngine时,输入法候选框的位置会跑偏(不在输入框的下方)。



3.在使用QWebEngine时,当输入中途按退格键(BackSpace),第一个输入的字符不能被正常删除。



Qt5.7.1修复了这三个bug。

image.png

目录
相关文章
|
数据可视化 图形学 开发者
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
1964 4
|
开发工具 git druid
解决Git中fatal: refusing to merge unrelated histories
Git的报错 在使用Git的过程中有时会出现一些问题,那么在解决了每个问题的时候,都需要去总结记录下来,下次不再犯。 一、fatal: refusing to merge unrelated histories 今天在使用Git创建项目的时候,在两个分支合并的时候,出现了下面的这个错误。
109607 6
|
存储 设计模式 开发框架
总结开发中基于DevExpress的Winform界面效果
总结开发中基于DevExpress的Winform界面效果
|
6月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
197 4
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
算法 开发者
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
【Qt UI相关】Qt5和Qt6中关于高DPI缩放属性
1641 1
|
安全 网络安全 数据安全/隐私保护
`certifi`是一个Python包,它提供了一个包含Mozilla证书颁发机构(CA)Bundle的PEM文件。
`certifi`是一个Python包,它提供了一个包含Mozilla证书颁发机构(CA)Bundle的PEM文件。
Qt下载(使用国内镜像)
Qt下载(使用国内镜像)
7165 2