首页 > 其他分享 >关于嵌入式QT QML 竖屏屏幕显示为横屏

关于嵌入式QT QML 竖屏屏幕显示为横屏

时间:2023-11-06 18:15:43浏览次数:42  
标签:size QT 竖屏 横屏 qml include wearable view

硬件平台:全志的A40I-H (从淘宝一家广州卖家买的开发板)

软件平台:Linux 内核版本3.10.65

QT版本:5.9.0

当时遇到的问题,在PC上运行一个qml的demo,是正常的横屏显示的。

但是交叉编译过后,烧录到开发板子上面,发现是旋转了90度显示 大致如下图所示: 

当时非常的头大,如果按照文档上面,使用QT QWidget生成的程序的话,是可以通过QT\_QPA\_EGLFS_ROTATION=90旋转90度,而QML写的程序却不行
尝试使用QT\_QPA\_EGLFS\_WIDTH 和 QT\_QPA\_EGLFS\_HEIGHT去设置宽高,也无果

后面在CSDN上面找到这位博主的帖子,帮助我解决了这个问题,链接为:嵌入式 Qt/Qml 屏幕旋转(横屏,竖屏)问题的解决

我是一个纯纯小白,当时也是不懂得怎么去修改我的代码,只po了关键部分代码上来。

在QT5.9.0中的Example程序,他们的根对象是QQmlApplicationEngine engine,而不是这位博主写QQuickView view,后面经过很多天的不断学习,我才知道其实是可以在main函数中修改根对象从而实现这位博主的方法。 我这里使用的Example是QT5.9.0中的示例wearable例子进行修改。
对原本生成的wearable.cpp进行一些修改:

#include <QGuiApplication>  
#include <QQmlApplicationEngine>  
#include <QQuickStyle>
#include <QQuickView> //添加Quickview所需的头文件
#include <QQuickItem> //添加QQuickTransform所需的头文件

//这个结构体是来自那位博主的代码
//作用按照我拙劣的理解应该是一个转置+平移的功能
//具体可以看那位博主的博客,里面有图片可以对照理解。
struct MyTransform : public QQuickTransform {
    MyTransform(QSizeF size) {
        tr_.rotate(270);
        tr_ *= QTransform::fromTranslate(0, size.width());
    }
    virtual void applyTo(QMatrix4x4 *matrix) const
    {
        *matrix = *matrix * tr_;
    }
    QTransform tr_;
};


int main(int argc, char *argv\[\])  
{  
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);  
    QGuiApplication app(argc, argv);

//! \[style\]  
    QQuickStyle::setStyle(QStringLiteral("qrc:/qml/Style"));  
 //! \[style\]
#if 0  //屏蔽原本的engine根对象
    QQmlApplicationEngine engine;  
    engine.load(QUrl(QStringLiteral("qrc:/wearable.qml")));
#else //使用QQuickView作为根对象
    QQuickView view;
    view.setSource(QUrl(QStringLiteral("qrc:/wearable.qml")));
    view.show();

//这几行是用来测试是否可以获取到这个Item,打印信息给自己看的。
  QQuickItem* rootItem = view.rootObject();
    if (rootItem) {
        // 对rootItem进行操作
        qDebug() << "Root object width:" << rootItem->width();
    } else {
        qDebug() << "Failed to get root object.";
    }
//这部分代码也是来自那位博主,用于实现旋转和平移。
    QQuickItem * root = view.rootObject();
    QSizeF size{root->width(), root->height()};
    view.resize(size.height(), size.width());
    (new MyTransform(size))->appendToItem(root);

#endif
return app.exec();  
}

 

在wearable.qml中进行修改
1.把原本的根元素QQC2.ApplicationWindow改为Item
2.把background属性、header属性、footer属性去掉

在window下显示的结果:

这个例子就可以旋转过来了,至于header和footer部分,需要自己修改一下即可。

同样的,改为Item后,Width和Height属性也要改为当前显示屏的分辨率。
我这块屏幕是10.1寸的竖屏,分辨率是800x1280,在QML的代码中,我设置
```
width: 1280
height: 800
```
最终交叉编译过后在板子上运行如下:

 

疑问:
其实我不是太懂以window作为根对象和以其他元素作为根对象的区别,因为我查阅其他视频资料发现,最早的QML根对象并不是以window作为根对象
我也不太确定,如此修改之后会不会对后续的代码开发造成一些影响,我猜可能一些window所属的属性需要自己重新实现,比如上面屏蔽掉的header、footer等等。


参考文档:
嵌入式 Qt/Qml 屏幕旋转(横屏,竖屏)问题的解决

 

标签:size,QT,竖屏,横屏,qml,include,wearable,view
From: https://www.cnblogs.com/mgshadow/p/17813338.html

相关文章

  • QT 应用程序打包
    一、简述在Windows环境将应用程序打包成一个exe应用,以便给没有Qt环境的用户使用。打包工具:Windows使用windeployqt,Ubuntu使用linuxdeployqt(linuxdeployqtxxx可执行文件-appimage)。步骤:使用windeployqt将exe所依赖的库文件找出来,然后使用EnigmaVirtualBox将......
  • QtCreator 格式化代码
    目录Beautifier插件介绍配置Beautifier步骤1、使用ArtisiticStyle2、使用Clang-format3、使用uncrustify参考Beautifier插件介绍QtCreator本身默认支持代码格式化,具体格式化快捷键为:Ctrl+i。可以选择部分或全部选择后执行Ctrl+i操作完成代码格式化。但只限于缩进......
  • QT删除python中的单行注释
    python中的#号可能存在于字符串中:print("'asd#f'00#0",'#1“23') #这里才开始注释没想到用什么正则来删除python中的单行注释所以解决方案为:QStringremoveLineComment(QStringsLine){qDebug()<<"removeLineComment:"<<sLine;QStringsRes......
  • 035-第三代软件开发-Qt属性系统
    第三代软件开发-Qt属性系统文章目录第三代软件开发-Qt属性系统项目介绍Qt属性系统目的属性与类成员使用声明属性的要求动态属性属性和自定义类型总结一下关键字:Qt、Qml、Q_PROPERTY、setProperty、属性项目介绍欢迎来到我们的QML&C++项目!这个项目结合了QML(QtMeta-Ob......
  • Qt绘制圆角矩形的内发光或外发光效果
    Qt没有内置的发光效果,只有一个QGraphicsDropShadowEffect类可以对整个控件产生阴影(可近似为外发光)效果。此处作者整理了如何用QPainter手工绘制形状的内发光或外发光效果。本文主要涉及到QPainter类中的图像混合模式技巧。下面允许我把Qt帮助中的内容复制过来供参考。调用QPaint......
  • PyQt5-16 屏幕坐标系的了解和基本使用
    (16什么是屏幕坐标系?)1什么是屏幕坐标系?2相关概念屏幕坐标系,即窗口相对于屏幕的坐标。屏幕左上角坐标称为原点坐标(0,0);窗口的坐标,即窗口的左上角相对原来的坐标,如下图示:窗口的宽和高也有两种,一种是工作取的高度,一种菜单栏的高度,比如如下说明:3代码实现创建一个窗口,......
  • Golang使用mqtt
    示例使用使用EMQX提供的免费公共MQTT服务器,该服务基于EMQX的MQTT物联网云平台创建。服务器接入信息如下:Broker:broker.emqx.ioTCPPort:1883WebsocketPort:8083golang代码如下packagemainimport( "fmt" mqtt"github.com/eclipse/paho.mqtt.golang" "time......
  • qt---主进程加载一个子进程的方法以及其中遇到“Calling a private constructor of cl
    .proQT+=coreguigreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsCONFIG+=c++17#YoucanmakeyourcodefailtocompileifitusesdeprecatedAPIs.#Inordertodoso,uncommentthefollowingline.#DEFINES+=QT_DISABLE_DEPRECATED_BEFORE=0......
  • QT + OPENCV + OpenCV_contrib + MINGW编译
    参见  QT+OPENCV+OpenCV_contrib+MINGW编译_东方.既白的博客-CSDN博客注意事项:1. opencv不要采用版本太高的,与mingw730_64编译器不兼容。太多错误2. ......
  • 二十六、QT发送http请求并解析返回的json数据
    1.使用的模块和类模块:network类:QNetworkAccessManager、QNetworkRequest、QNetworkReply、QJsonDocument、QJsonObject、QJsonArrayQSslSocket::sslLibraryBuildVersionString();:查看当前使用的ssl版本,访问HTTPS时需要使用、复制libcrypto-1_1-x64.dll和libssl-1_1......