Qt程序在linux Console模式下运行
原文链接:在x86非图形界面下运行QtEmbedded程序
众所周知,一般我们在桌面环境下可以使用qvfb这个工具作为运行QtEmbedded程序的模拟器环境,但我们今天不讲这些大家都知道的事情。
回顾一下QtEmbedded对系统以及硬件的要求,一般来说只有下面少少的几点:
1、 Linux内核+ framebuffer驱动+ socket支持
2、 /tmp可写
3、有合适的键盘和鼠标(触摸屏)驱动并做好与Qt的集成
4、合适的编译器和交叉编译工具链(toolchain)
那么聪明的同学已经想到了,为什么我们不能直接在桌面的linux系统中运行QtE程序呢?似乎QtE的要求我们的桌面系统一样可以满足亚。
答案当然是肯定的。
一条一条来说的话, 1内核支持framebuffer和socket这一条大部分发行版默认的内核就可以; 2就不用说了;3在QtE的源码里自带了对普通桌面鼠标和键盘硬件的驱动;4对于X86系统,普通的gcc就可满足,一般linux发行版带的gcc版本也基本可以满足QtE编译的要求。
那么,怎么才能实现我们的想法呢?还是要一步一步按部就班来做。
以笔者的Ubuntu 为例,介绍一下设置的具体步骤。
编译QtEmbedded
这一步编译和编译qvfb版本区别不大,只是不再需要configure的时候加-qvfb参
数,只用不加参数的configure足矣。
# tar -zxvf qt-em bedded-linux-opensource-src-4.5.1.tar.gz
# cd qt-em bedded-linux-opensource-src-4.5.1
# ./configure -embedded x86 –qvfb
// 我的编译情况是: ./confignre –prefix /work/Trolltech/QtEm bedded-4.5.1–no-o penssl
# gmake
# gmake install
qt-em bedded 被安装在这个目录下/usr/local/Trolltech/QtEmbedded-4.5.1
设置环境变量:
# vi ~/.bashrc
把下面的加上去
export QTEDIR=/usr/local/Trolltech/QtEm bedded-4.5.1
export PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/bin:$PAT H
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEm bedded-4.5.1/lib:$LD_LIBRA RY_PATH
至此,qt-em bedded安装完毕
(我是这么编译的 ./cofigure –prefix 你要安装的目录–no-openssl)SSL,Security Socket Layer,是一个安全传输协议,在Internet网上进行数据保护和身份确认
打开framebuffer
Ubuntu系统默认没有打开framebuffer,缺少QtEmbedded需要的/dev/fb0设备,需要我们手动打开fb的支持。
在上一篇文章《对linux framebuffer的初略的认识》里谈到了怎么打开,只要在设备文件中看淡有/dev/fb0或者/dev/fb1就可以啦!然后在用命令cat /dev/fb0 出现大量的乱码,说明你成功的打开了!!!
尝试运行QtE的程序
上面的那个编译过程估计得几个小时,之后有在安装的目录下面有一些demo的,或者你把自己写好的程序拷进去,
#qmake –project //生成.pro 文件如果你的函数中用到了什么模块你可以加在.pro文件里面
#qmake –makefile //生成Makefile文件
#make //生成可执行文件
之后运行执行文件的时候记住后面加个–qws 参数!!!
qt/e嵌入式的应用程序要把显示结果输出到FrameBuffer,在命令行运行这个程序时,在程序名后加上-qws的选项。
-qws选项的含义是使这个应用程序成为服务器。
我是在fedora13上实验的,呵呵!成功啦!不过最后还有点问题就是最后程序中显示中文有问题!!刚开始我以为是linux Console模式下不支持中文显示,之后在网上找到一个显示中文的方法,zhcon 这个命令行!!
#zhcon –utf8 //这样就可以显示中文啦在Console模式下
但是程序还是不行!网上的很多办法我都试啦!就连以为是.cpp 文件编码的可能我也试啦,但是不行!!
这是截之一篇网上的文章:
关于中文乱码的问题,我怀疑是你的cpp文件的编码是用的system,也就是GBK.
你把cpp文件的编码也改为utf-8,应该就解决中文乱码的问题了。
在qtcreator中 edit --> select Encoding 可以改变代码文件的编码,也可以在project --> edit setting中选择整个项目的文件编码。
最后还是没有能显示中文,因为老师突然说不这么弄啦,我自己也有点泄气了就没有做下去啦!还有点问题就是fb显示的时候,如果Console上有打印信息输出的话,显示的窗口就会消失一部分,显示不正常,这个到时在网上听到有个解决的办法,要用到framebuffer 多线程相关的知识吧!!有点懒就没有继续研究下去啦!呵呵!!!以后有机会一定的完成!!!。