前言:

在海思HI3520DV300上调试QT5.9.0有一小段时间了,这里将遇到的比较典型的问题做一个记录,以备后续查询,也可给同行一个参考。本人只使用过QT5.9.0这一个版本,如有描述错误欢迎指出。

说明:

QT版本:qt-everywhere-opensource-src-5.9.0

  1. qt-creator版本:qt-creator-opensource-linux-x86_64-4.7.0.run
  2. 运行设备:HI3520DV300,ARM Cortex A7 @Max. 800MHz,nand flash 128M
  3. 编译环境:Ubuntu16.04
  4. 交叉编译工具:arm-hisiv300-linux-

1.交叉编译QT源码

源代码的交叉编译需要耗费很多的时间,在我笔记本上花费了好几个小时才编译完成,其中还有几次编译不过的地方,可以谷歌搜索具体解决方法,这里提供一个我已经编译好了的产物。使用的交叉编译工具是arm-hisiv300-linux-

这里需要注意:使用我编译的install_5.9.0_arm_.tar.gz文件时,一定需要将解压出来的install文件放到/home/biao/QT/qt_to_arm/ 目录之下,应该是对我编译的目录有依赖,否则在配置qtcreater交叉编译的Qt version 时qmake没法识别,最终导致无法交叉编译工程。

2.编译海思linuxfb

在海思中,使用海思官方自带的sample进行修改。Hisilicon Framebuffer(以下简称 HiFB)是海思数字媒体处理平台提供的管理图像叠加层的模块,它基于 Linux Framebuffer 实现,在提供 Linux Framebuffer 基本功能的基础上,还扩展了一些图形层控制功能,如层间 Alpha、设置原点等

在海思开发板中,要先运行sample_hifb对设备的fb进行初始化之后才能运行QT,不然无法显示,QT会提示open /dev/fb error;

3.配置qt-creator

qt-creator的配置主要是交叉编译工具的配置,这里需要使用到上面交叉编译构建的产物install_5.9.0_arm_.tar.gz,还需要海思的交叉编译工具:arm-hisiv300-linux-

4.编译helloworld

新建一个最简单的QT工程,配置海思交叉编译,编译,构建,将生产的执行文件和sample_hifb一起拷贝到开发板中。

5.设置Hi3520运行环境

(1)拷贝运行时需要的库文件:这里为了节省空间,只拷贝有需要的库文件,还有就是有很多实际就是一个文件,通过软链接实现链接操作节省空间。

/usr/share/qt # 
/usr/share/qt # ls
lib  plugins
/usr/share/qt # ls ./lib/
ibQt5Core.so    libQt5Gui.so    libQt5Widgets.so
libQt5Core.so.5 libQt5Gui.so.5  libQt5Widgets.so.5
libQt5Core.so.5.9   libQt5Gui.so.5.9    libQt5Widgets.so.5.9
libQt5Core.so.5.9.0 libQt5Gui.so.5.9.0  libQt5Widgets.so.5.9.0
/usr/share/qt # ls ./plugins/
platforms
/usr/share/qt # ls ./plugins/platforms/
libqlinuxfb.so

(2)设置QT的运行环境:在etc/profile中添加下面内容

#添加QT库路径
LD_LIBRARY_PATH="/nfsroot:/usr/local/lib:/usr/lib:/hi3520/lib:/hi3520/lib/libmpp:/usr/share/lib:/usr/share/qt/lib"
export PATH
export LD_LIBRARY_PATH
#设置使用linuxfb,同时设置QT显示分辨率800新480
QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:
export QT_QPA_PLATFORM #设置QT平台相关文件路径
QT_QPA_PLATFORM_PLUGIN_PATH=/usr/share/qt/plugins/
export QT_QPA_PLATFORM_PLUGIN_PATH

6.运行:

注意:在我的设备上,是通过HDMI将图形数据发送给显示屏,

先运行fb,然后运行QT程序,运行如下:

/hi3520/app # chmod 777 sample_hifb
/hi3520/app # ./sample_hifb &
/hi3520/app # HDMI start success. /hi3520/app #
/hi3520/app #
/hi3520/app # ./hellworld
【RootFs】 [Stop rootfs feed dog!]
【RootFs】 [HeartBeatCnt:600]
【RootFs】 [Exit Process 973]

运行效果如下:

注意上面的显示是乱码,这个问题在下面问题中会具体讲解。

问题分析与记录:

问题一:QT运行慢问题

我在海思HI3520DV300设备上运行,当拖动QT界面的时候,CPU使用率会非常的高,但是正常运行的时候基本上不占用CPU,初步定为是当界面刷新的瞬间占用CPU高,不确定是HI3520DV300的处理能力不行还是移植的QT哪里设置不对。

问题二:QT图层隐藏问题

在Ubuntu中我们要隐藏QT界面方法有很多,但是有些在海思HI3520中不起作用。在海思中它是按图层来出来,需要隐藏QT图层,其实不需要去设置海思的fb参数,而是直接在QT程序中使用方法三就可以实现:

/**方法1**/
// this->setWindowOpacity(0);
// this->setAttribute( Qt::WA_TranslucentBackground,true );
// this->setWindowFlags( Qt::WindowMinimizeButtonHint );
// exit(0);GuiIPCPSendHeartBeat /**方法2**/
// this->setVisible(true);
// this->setHidden(true); /**方法3**/
this->setHidden(true);
this->setCursor(Qt::BlankCursor); //隐藏鼠标

问题三:鼠标问题

  1. 要想在海思平台中运行QT,并且支持鼠标控制界面,这个需要配置内核,使内核支持你所使用的鼠标类型。在我使用的HI3520SDK中,内核默认并没有配置鼠标使用的工程。
  2. QT鼠标不支持热拔插,所以在需要在设备启动之前插入鼠标
  3. 鼠标正常配置,正常运行的时候,在/dev/input 下可以看到下面设备:
loop6               ram1                stdin
/dev # cd input/
/dev/input # ls
event0 mice mouse0
/dev/input #

event0  mice    mouse0 这三个设备,少一个都不能正常运行。

问题四:字体问题

上面我们可以看到最开始运行的时候,显示的英文字符和中文字符都是乱码,这是因为我们没有将字体库的原因。

在QT5.9中,我们并不需要将字体单独的拷贝的海思HI3520设备上,也不需要设置环境变量(网上介绍的很多都是QT4的方法,需要自己拷贝库,然后配置环境变量),在QT5.9只需要在编译工程的时候将字符加载进去就可以了,QT会自动将字符库文件和可执行文件一起打包起来。

我使用的字体库是DroidSansFallback.ttf,将它添加到QT工程的资源库中,然后在程序中加载:

#include "helloworld.h"
#include <QApplication> #include <QFontDatabase>
#include <QDebug> int main(int argc, char *argv[])
{
QApplication a(argc, argv); QFont iconFont;
int fontId = QFontDatabase::addApplicationFont(":/new/prefix1/DroidSansFallback.ttf");
QStringList fontName = QFontDatabase::applicationFontFamilies(fontId); if (fontName.count() > 0) {
iconFont = QFont(fontName.at(0));
} else {
qDebug() << "load DroidSansFallback.ttf error";
} a.setFont(iconFont); HelloWorld w;
w.show(); return a.exec();
}

该字体至此英文中文,以及各种字符图案,图案代码可以从这里查询:

http://fontawesome.dashgame.com

https://fontawesome.com/cheatsheet?from=io

字体可以从这里下载: DroidSansFallback.ttf

正常显示字体的图像如下:

---------------------------End---------------------------
长按识别二维码
关注 liwen01 公众号

QT5.9移植到海思HI3520设备上运行的更多相关文章

  1. live555 交叉编译移植到海思开发板

    本文章参考了.http://blog.csdn.net/lawishere/article/details/8182952,写了hi3518的配置说明.特此感谢 https://blog.csdn.n ...

  2. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  3. OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

    前言   移植opencv到海思平台,opencv支持对视频进行解码,需要对应的ffmpeg支持.   Ffmpeg的移植   Ffmpeg的移植请参考之前的文章:<FFmpeg开发笔记(十): ...

  4. 【Win 10应用开发】如何知道当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  5. [转]---UAP中如何判断当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  6. android设备上运行i-jetty服务

    android设备上运行i-jetty服务: 1) i-jetty安装 本人小菜一个,i-jetty源码有好几个文件,不知道怎么运行起来,于是找了一个现成可运行的i-jetty工程(感谢这位同学的分享 ...

  7. Android Studio官方文档: 如何在你的设备上运行你的程序

    在实体设备上运行您的应用 设置您的设备,如下所示: 使用一根 USB 电缆将您的设备连接到您的开发机器. 如果您是在 Windows 上开发,可能需要为您的设备安装相应的 USB 驱动程序.如需帮助安 ...

  8. RN在设备上运行

    https://facebook.github.io/react-native/docs/running-on-device.html 在发布之前,最好是在真实的设备上测试一下应用.如果是通过crea ...

  9. 海康NVR设备上传人脸图片到人脸库

    海康开放平台--海康文档链接--海康开发包和文档下载链接 硬件:海康超脑NVR(全称Network Video Recorder,即网络视频录像机).人脸摄像机. 环境:JDK_1.8 Windows ...

  10. 在海思hisiv100nptl平台上交叉编译并安装SRS

    ./configure --with-arm-ubuntu12 && make 须要安装: apt-get installgcc-arm-linux-gnueabi     ,但hi3 ...

随机推荐

  1. Lean大神编译的OpenWRT问题汇总

    1.初始密码为password,登录路由器后第一件事要修改默认密码 2.Lean大神编译的OpenWRT无法SSH.SFTP, 3.为了方便操作,一定要编译的时候安装TTYD,但是TTYD默认无法打开 ...

  2. linux文件和文件夹的筛选、查找及用户和组管理命令

    1.列出当前系统上所有已经登陆的用户的用户名, 注意:同一个用户登录多次,则只显示一次即可. 查看系统用户的命令为: (1)getent passwd 查看系统上的所有用户信息 (2)w 查看登录用户 ...

  3. 微信小程序实时噪声分贝

    为了做一个能够检测实时噪声分贝的小程序,网上找了很多例子,基本没有完整的代码,手写了一个,话不多说直接上效果图 实现实时录音的功能,并且能够根据声音分贝大小转动仪表盘显示实时的分贝,运用echart实 ...

  4. QNX 性能分析工具

    QNX 性能分析工具 小结 hogs:列出最占用 CPU/RAM 的进程,可以统计内存占用详细情况[可单个进程] pidin:显示进程信息.系统信息.库信息...[可单个进程] ps:显示进程信息[可 ...

  5. CSS 基础 2 - Box Model 盒模型

    CSS 基础 2 - Box Model 盒模型 Box Model 盒模型是网页布局的前提.网页布局的几种方式: Table(过时):在 CSS 出现之前,一般用表格布局(将表格边框线隐藏) Flo ...

  6. poj 3987 Computer Virus on Planet Pandora —— ac自动机复习

    poj 3987 Computer Virus on Planet Pandora ac自动机复习 题意如下 给出多个模式串,最后给出一个文本串,求有多少个模式串被文本串包含或者被反序的文本串包含 几 ...

  7. Llama2-Chinese项目:6-模型评测

      测试问题筛选自AtomBulb[1],共95个测试问题,包含:通用知识.语言理解.创作能力.逻辑推理.代码编程.工作技能.使用工具.人格特征八个大的类别. 1.测试中的Prompt   例如对于问 ...

  8. Multi-Architecture镜像制作指南已到,请查收!

    摘要:使用Multi-Architecture镜像,可以让docker根据系统架构去拉取对应的镜像,服务的部署脚本等可以在不同架构的系统间使用相同的配置,减化服务配置,提高了服务在不同系统架构间的一致 ...

  9. 轻松带你学习java-agent

    摘要:java-agent是应用于java的trace工具,核心是对JVMTI(JVM Tool Interface)的调用. 本文分享自华为云社区<Java动态trace技术:java-age ...

  10. 百万奖池角逐,华为云IoT边缘带你看懂“边缘计算开发者大赛”

    摘要:2022年9月1日,第二届边缘计算开发者大赛正式启动. 2022年9月1日,第二届边缘计算开发者大赛正式启动! 本届大赛由华为云参与承办,中国信息通信研究院.工业互联网产业联盟.边缘计算产业联盟 ...