第一个Qt应用的实现-QT4.8.5移植到S3C2440

2023-11-09 05:08

本文主要是介绍第一个Qt应用的实现-QT4.8.5移植到S3C2440,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、linux下面装好Qtcreator

首先要准备好交叉编译所需要的软件包:

1arm-linux-gcc-4.4.3-20100728.tar.gz(交叉编译环境)

2qt-everywhere-opensource-src-4.8.5.tar.gzQt的源码)

3qt-creator-linux-x86_64-opensource-2.5.2.bin(我的系统是64位,所以选择x86_64

4tslib-1.4.tar.gz(触摸屏校验工具)

其中(2)和(3)在http://download.qt-project.org/archive/ 进行下载。

 

记住tslib需要交叉编译,具体方法网上很多,常见错误我的博客也有。

(确保tslib/bin下的文件是32ARM的,并且移植到开发板usr/local/tslib下后ts_calibrate可以正确运行)

 

qt-creator-linux-x86_64-opensource-2.5.2.bin 拷贝到linux系统中,在终端中把路径切换到qt-creator-linux-x86_64-opensource-2.5.2.bin所在的路径,运行令:./qt-creator-linux-x86_64-opensource-2.5.2.bin  就会出现图形安装界面;下面的安装步骤就和我们在windows下安装软件差不多。

 

注意:下的版本要和你的操作系统相匹配,32位的系统下对应32位的应用程序;

 

 

 

二,Windows下面安装Qt

下面我们来进入正题,windows下安装4.8.5版本的qt软件。

1、下载qt-win-opensource

首先需要下载QT安装软件,在qt官网可以直接进行下载,但是由于天朝局域网的限制,官网打开的速度很慢,而且有些网址无法打开,这里贴出直接的下载网址,省去从官网找下载网页的麻烦。网址是:http://download.qt.io/archive/qt/

QT的编译可以使用mingw或者vs2008vs2010进行,其中mingw是可以使用一个库进行编译,其他的vs版本需要安装vs才能进行QT编译,vs比较大,所以我这里就使用mingw,下载对应的版本qt-win-opensource-4.8.5-mingw.exe

2、下载和安装MinGW

安装这个之前需要mingw,所以需要先下载mingw,但是QT每个版本对于mingw的版本也是有要求,这里提供可以匹配的mingw下载http://download.csdn.net/detail/andylauren/9583691

下载完成之后只需要进行解压,我一般习惯解压在c盘根目录下,并将文件夹改名为mingw。这个文件夹路径在后面设置的时候需要用到。

3、安装qt-win-opensource

这一步骤比较简单,就是下一步下一步就行,注意设置一下安装路径就好。

4、下载和安装QTcreator

qt-win-opensource是一个纯代码编辑环境,如果对于老工程师可以完全使用代码进行界面的编辑,但是有界面设计的可以提高开发效率,所见即所得。

下载地址是:http://download.qt.io/archive/qtcreator/

我选择的是qt-creator-win-opensource-2.5.2,因为我选择最新的3.0版本不能正常使用。然后也是简单的下一步下一步,在其中一个步骤的时候需要选择mingw的路径,就是将前边解压的mingw路径填写进去,然后在安装的时候设置一下安装路径就可以了。

5QTcreator设置,环境变量的设置

这个时候是不能使用QTcreator进行QT开发,需要对一些进行环境设置,

步骤是:工具-》选项-》构建和运行-Qt Versions

将其中的qmake路径填写qt-win-opensource的安装路径中的bin目录下的qmake.exe

编译器选项

在之前安装的时候如果已经选择了mingw路径的这里会自动出现,如果之前跳过了在这里可以选:添加-mingw,然后找到目录下的bin目录

在构建套件(Kit)选项卡下需要设置编译器:选择MinGWQt版本:选择Qt 4.8.54.8.5

现在基本已经设置好了,已经可以使用QT进行编译,但是编译出来的可执行文件只能在QT中使用qt打开运行,在文件夹中直接点击可执行软件不能运行,会提示找不到库,这里是需要设置一下windows的环境变量,在PATH中添加qt-win-opensource安装路径下的bin路径,和mingwbin路径。

首先右键我的电脑-》属性-》高级系统设置-》高级-》环境变量-》系统变量-path中添加上述路径。我的路径是D:\Qt\4.8.5\bin;D:\mingw\bin;

这样就可以在文件夹中直接双击可执行文件运行了。

6、个人设置

我比较喜欢深色背景的编程环境,可以在选项-》文本编辑器-》配色方案中进行修改,我修改为Inkpot

还有就是我使用eclipse习惯了,习惯使用alt+/来作为自动补齐,可以在环境-》键盘中找到CompleteThis修改为Alt+/就可以了。

 

到这里就完成了全部的windows下载安装和设置,如果习惯了windows下载操作可以在windows下做开发,然后完成后拿到linux下进行编译,运行。

 

三、Qt库源码编译

将源码qt-everywhere-opensource-src-4.8.5.tar.gz 进行解压,并复制三份到/usr/local目录下,并分别命名为qt-pcqt-arm

进入qt-pc目录,执行如下操作:

#./configure

# make

# make install

编译过程中出现的问题:

出错:Basic XLibfunctionality test failed!

这个错误主要是因为,XLib库没有安装,所以在编译X11平台时,应该保证,以下命令正确执行:sudo apt-get install libx11-dev  libxext-dev libxtst-dev

注意:可以使用 make confclean 命令 把以前的配置信息清除掉,然后再重新配置。

 

下面编译qt-arm

必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm ”参数, 不然安装后不在QtEmbedded-4.8.5-arm文件夹下,而是覆盖了QtEmbedded-4.8.5

写一个脚本文件,把下面放进去

# ./configure \

-prefix  /usr/local/Trolltech/QtEmbedded-4.8.5-arm \ 

-opensource \

-confirm-license \

-release -shared \

-embedded arm \

-xplatform qws/linux-arm-g++ \

-depths 16,18,24 \

-fast \

-optimized-qmake \

-pch \

-qt-sql-sqlite \

-qt-libjpeg \

-qt-zlib \

-qt-libpng \

-qt-freetype \

-little-endian  -host-little-endian \

-no-qt3support  \

-no-libtiff   -no-libmng \

-no-opengl \

-no-mmx  -no-sse  -no-sse2 \

-no-3dnow \

-no-openssl \

-no-webkit \

-no-qvfb \

-no-phonon \

-no-nis \

-no-opengl \

-no-cups \

-no-glib \

-no-xcursor   -no-xfixes  -no-xrandr   -no-xrender \

-no-separate-debug-info \

-nomake examples   -nomake  tools   -nomake docs

 -qt-mouse-tslib  -I /usr/local/tslib/include  -L /usr/local/tslib/lib

如果放弃配置,则使用命令:# make confclean

编译:# make

安装:# make install

(我自己遇到的问题另一篇博客也有写)

安装完成后,在/usr/local/Trolltech目录中有个文件夹:Qt-4.8.5QtEmbedded-4.8.5-arm

 

 

然后将库QtEmbedded-4.8.5-arm下面的lib plugins demos example目录通过NFS服务放到开发板相同目录下面即可。

到这个时候就可以在开发板上运行QT程序了

 

四、测试

 

首先我们需要自己写一个代码,什么 代码都行,拿来别人的也可以。可以在windows或者linux上写都行,我个人的习惯是在windows下面编辑代码,查看运行效果,效果没问题了在拿到linux下进行交叉编译。

 

下面我们现在windows下写一个最简单的例子:你好世界!

 

这个例子中会使用到中文和按钮切换标签的内容。

 

如何创建工程这里就不细讲了,书上和网上有很多教程,按照步骤去做就好。

 

然后就可以将我们的文件复制到linux 下面去进行交叉编译了,这里只需要复制源码文件,工程文件建议删除,因为在交叉编译的时候会生成新的工程文件,我的文件如下

 

把他们压缩成一个包,到linux下面去解压,然后使用终端跳转到这写文件的路径下

 

linux@ubuntu:~/16021/QTprog$ cd /usr/local/Qt(放上面四个文件的目录)

然后找到交叉编译出来的qmake路径使用qmake -project

 

linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /usr/local/TrolltechQtEmbedded-4.8.5-arm/bin/qmake -project

有的人会把这个交叉编译qmake设置为环境变量,我习惯把x86下的qmake设置为环境变量,这样就可以在linux下面查看效果,但是在交叉编译的时候就需要输入qmake的全路径,如何设置还需要根据个人需要。

 

这时候目录下就会出现.pro的工程文件

 

然后我们再qmake就可以生成makefile

 

linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /usr/local/TrolltechQtEmbedded-4.8.5-arm/bin/qmake

然后使用make编译

 

之后会出现可执行文件,比如我的是chinesefont

 

把它拷贝到开发板的文件系统上,路径随意。我是直接拷贝到根目录下,然后需要一个启动脚本。

1. #!/bin/sh  

2. base1=qpe  

3. pid=`/bin/pidof $base1`  

4. if [ -n "$pid" ]; then  

5.     killall $base1  

6. fi  

7.   

8. base2=qss  

9. pid=`/bin/pidof $base2`  

10. if [ -n "$pid" ]; then  

11.     killall $base2  

12. fi  

13.   

14. base3=quicklauncher  

15. pid=`/bin/pidof $base3`  

16. if [ -n "$pid" ]; then  

17.     killall  $base3  

18. fi  

19.   

20.   

21. base4=fluidlauncher  

22. pid=`/bin/pidof $base4`  

23. if [ -n "$pid" ]; then  

24.     killall  $base4  

25. fi  

26.   

27. export TSLIB_ROOT=/usr/local/tslib #你开发板的tslib路径

28. export TSLIB_TSDEVICE=/dev/input/event2  

29. export TSLIB_TSEVENTTYPE=H3600  

30. export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf  

31. export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts  

32. export TSLIB_CALIBFILE=/etc/pointercal  

33. export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts  

34. export TSLIB_CONSOLEDEVICE=none  

35. export TSLIB_FBDEVICE=/dev/fb0  

36. export QTDIR=/usr/local/TrolltechQtEmbedded-4.8.5-arm/ #你的qt库路径

37.   

38.   

39. export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH  

40. export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin  

41.   

42.   

43. if [ -c /dev/input/event2 ]; then  

44.         export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"  

45.         if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then  

46.                 rm /etc/pointercal  

47.                 /root/tslib/build/bin/ts_calibrate  

48.         fi  

49. else  

50.         export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"  

51.         >/etc/pointercal  

52. fi  

53. export QWS_KEYBOARD=TTY:/dev/tty1  

54.   

55.   

56.   

57. FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)  

58.   

59. #export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"  

60. case "$FB_SIZE" in  

61. 800,480)  

62. export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"  

63. ;;  

64. 480,272)  

65. export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"  

66. ;;  

67. *)  

68. export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"  

69. ;;  

70. esac  

71. #export QWS_DISPLAY=:1  

72.   

73.   

74.   

75. export HOME=/root/QtE4Home  

76.   

77. #cd /home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher(qt可执行文件的路径)  

78. ./chinesefont -qws  

其中倒数第二行是跳转到可执行文件的路径下,根据自己的需要进行修改,我的脚本和可执行在同一个目录,所以我把这行注释掉了。

最后一行就是启动可执行程序,结尾的-qws是必须的。

 

是不是和电脑看到一样,如果想做成开机启动,只需要将启动脚本加入到/etc/init.d/rcS里面就可以了。

讲到这里我们就已经从windows安装到linux安装再到arm平台交叉编译,最后将自己的程序运行起来了 。

 

这篇关于第一个Qt应用的实现-QT4.8.5移植到S3C2440的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374118

相关文章

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.