开发板上Qt运行的环境变量的三条设置语句的详解
在终端中运行下面三句命令用于配置开发板上Qt运行的环境变量:
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/usr/lib/fonts/
设置成功后可以用下面的语句检查设置成功没有
echo $QT_QPA_GENERIC_PLUGINS
echo $QT_QPA_PLATFORM
echo $QT_QPA_FONTDIR
这几行环境变量的设置主要是为了在IMX6ULL等嵌入式开发板上运行Qt应用程序,指定输入设备、显示方式和字体目录。
如果想让结果一直生效, 可以编辑文件/etc/profile
,在后面追加上上面三条语句:
vi /etc/profile
这三条命令分别解释如下:
第1句配置命令
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
作用:
指定Qt使用tslib
插件来处理触摸输入,并设定输入设备为/dev/input/event1
。
QT_QPA_GENERIC_PLUGINS
:用于设置Qt的通用输入插件,如tslib
(触摸屏库)。
tslib:/dev/input/event1
:表示使用tslib
插件,并将设备文件/dev/input/event1
作为触摸屏输入设备。关于如何确认哪个设备文件对应触摸屏设备,可以参考我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145433887
这里的重点在于开发板上的Qt要具备什么条件才能使用tslib
插件。
你需要确保下面的两部分文件是存在的:
① tslib库安装在开发板上了,安装方法见 https://blog.csdn.net/wenhao_ir/article/details/144621008 【搜索“tslib库安装到开发板上并进行测试”】,由于之前我已经安装并测试了,这里就略过了。
② 开发板上有Qt提供的tslib插件文件 libqtslibplugin.so
,其路径如下:
/usr/lib/qt/plugins/generic/libqtslibplugin.so
用下面的命令查看目录/usr/lib/qt/plugins/generic/
下的文件:
ls /usr/lib/qt/plugins/generic/
可见libqtslibplugin.so
是存在的。
第2句配置命令
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
作用:指定Qt使用linuxfb
(Linux framebuffer)作为图形输出方式,并设定帧缓冲设备为/dev/fb0
。
这里关键还是如何确认/dev/fb0
对应的是LCD屏,如何确认的方法见 https://blog.csdn.net/wenhao_ir/article/details/145438283
QT_QPA_PLATFORM
:定义Qt的图形后端(QPA,即Qt Platform Abstraction)。linuxfb
:指明使用Linux的Framebuffer(帧缓冲)作为显示后端。fb=/dev/fb0
:指定具体的帧缓冲设备,一般/dev/fb0
是主显示设备。
第3句配置命令
export QT_QPA_FONTDIR=/usr/lib/fonts/
作用:指定Qt应用程序的字体目录,使其能够正确加载字体文件。
QT_QPA_FONTDIR
:定义Qt字体文件的搜索路径。
/usr/lib/fonts/
:该目录下通常包含.ttf
或.fon
等字体文件,确保Qt GUI应用可以正确显示文本。
我们可以去看下目录/usr/lib/fonts/
下有没有字体文件:
ls /usr/lib/fonts/
https://blog.csdn.net/wenhao_ir/article/details/145438538
可见有一个名叫 msyh.ttc
的字体文件。关于字个字体文件的介绍和来历,见博文 https://blog.csdn.net/wenhao_ir/article/details/145438538
设置这个目录后, Qt 会自动从 /usr/lib/fonts/
目录加载 msyh.ttc
作为默认字体。
总结:
这几行环境变量的作用是:
- 让Qt使用
tslib
处理触摸输入,并指定触摸屏设备。 - 让Qt使用Framebuffer进行图形渲染,并指定帧缓冲设备。
- 指定Qt的字体目录,确保UI能正确显示文本。
这样设置后,Qt应用程序可以在IMX6ULL等嵌入式Linux系统上通过Framebuffer渲染界面,并支持触摸输入。