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

举报
DreamLife 发表于 2022/04/15 23:21:34 2022/04/15
【摘要】 基于Qt的汽车仪表模拟 照例,还是先上效果图,宣传哈哈哈哈哈 今天学到一个新东西,就是Qt对高分屏的支持,即高DPI的支持,有个Qt写的软件在老板的SB2上运行出现了显示异常,因为老板的电脑分辨率是3000*2000 200的放大,导致软件不支持。所以在后面的软件中,需要对软件最高分屏支持,但是目前(5.10.0.版本...

基于Qt的汽车仪表模拟

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

今天学到一个新东西,就是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。

2019/08/21 00:21

说明:

本项目中所使借鉴原型来自:[吉利] 博瑞GE | 仪表HMI设计吉利汽车HMI项目

设计图的所有权和解释权都归吉利汽车所有。

本项目所有资源文件均有打不死的小海复刻制作。

本项目代码暂时不会开源,有需要的源码的可与我联系,左上角二维码加微信。

本项目仅限学习交流、禁止商业使用。

 

文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/100047184

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。