Qt5.6.1移植海思Hi3521d(三)

系列文章目录


Qt5.6.1移植海思Hi3521d(一)
Qt5.6.1移植海思Hi3521d(二)


前言

本章讲解如何将编译好的qt程序移植到海思Hi3521D板子上,并且能够启动qt界面,和正常显示中文


一、移植qt库

创建qt.conf,打包qt依赖库,具体参考我这篇博客Linux Qt程序打包发布
将编译好的Qt程序和qt.conf、QtLib文件夹放到同一目录,如下图所示:
Qt5.6.1移植海思Hi3521d(三)_第1张图片
QtLib目录下Core\Gui\Widgets三个库是必须的,其他库根据自己的需要拷贝,拷贝完之后,需要修改/etc/profile文件,需要修改的地方具体如下:

export LD_LIBRARY_PATH="/usr/local/lib:/usr/lib:/root/HelloQt/QtLib:/root/HelloQt/QtLib/lib"                                                                                                                                                                                                                                                                                                                                                                                                  
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0                                                                                                                                                                                                                                                        

修改完输入 source /etc/profile可立即生效

二、运行Qt界面

库和配置拷贝完之后,我们./HelloQt运行程序,可以发现,进程起来了,但是没有界面,因为海思的板子比较特殊,界面需要显示在图层上,具体说明如下:
Qt5.6.1移植海思Hi3521d(三)_第2张图片
所以,我上边/etc/profile配置时选的G0图层,对应的FB设备文件时/dev/fb0,我们需要做的时,打开fb之后,在显示QT界面就可以了,FB开发流程如下:
Qt5.6.1移植海思Hi3521d(三)_第3张图片

HiFB 的开发步骤如下:
步骤 1. 调用 open 函数打开指定的 HiFB 设备。
步骤 2. 调用 ioctl 函数设置 HiFB 的象素格式以及屏幕高宽等参数(详细内容请参见《HiFB API 参考》)。
步骤 3. 调用 ioctl 函数获取 HiFB 所分配的物理显存大小、跨度等固定信息。调用 ioctl 函数也 可以使用 HiFB 提供的层间 colorkey、层间 colorkey mask、层间 alpha、原点偏移等功 能。
步骤 4. 调用 mmap 函数将物理显存映射到虚拟内存空间。
步骤 5. 操作虚拟内存,完成具体的绘制任务。在此步骤可以使用 HiFB 提供的双缓冲页翻转等 功能实现一些绘制效果。
步骤 6. 调用 munmap 解除显存映射。
步骤 7. 调用 close 函数关闭设备。
----结束

具体细节我也讲不清楚,海思提供的开发包里面文档有详细说明,认真看就行了;
然后是打开HiFB具体功能函数,我这边就不方便提供了,我这边是拿的这个海思的demo改的,应该不难,demo具体路径为:

Hi3521D_V100R001C01SPC040\01.software\board\Hi3521DV100_SDK_V1.0.4.0\package
\mpp\sample\hifb


打开fb之后,就可以创建qt界面,然后show显示,效果如下图:

只显示了字幕和数字,没有中文,原因是缺少字库

三、添加字库

`我这边是直接将字库编译到可执行程序中,main函数添加如下代码:

QFont iconFont;
int fontId = QFontDatabase::addApplicationFont(":/font/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);

使用此方法,则./QtLib/lib/下的fonts文件可以删除掉

在这里插入图片描述
你也可以配置字库路径,在/etc/profile中添加如下代码即可

export QT_QPA_FONTDIR=/root/HelloQt/QtLib/lib/fonts

再次运行qt程序,就可以了

总结

关于界面居中问题,打开fb里面可以设置,需要自己计算偏移位置居中,另外,附上我使用的 海思Qt中文字库

你可能感兴趣的:(Qt海思3521D,qt)