导航:首页 > 源码编译 > qt指定条件编译条件

qt指定条件编译条件

发布时间:2022-05-13 07:15:00

A. QT编程与移植的问题

1. 简介
QT是目前在linux上使用较广的一个图形系统。用户经常配合KDE桌面环境来使用。需要注意的是我们看到的并操作的是KDE,而不是QT。QT只是一套库函数(类库),KDE才是可执行程序.同时KDE为了其他程序方便的对其操作,也提供一套库函数(类库)。
在PC机上的QT是基于X11图形系统的,在嵌入设备中往往不需要这么累赘,只需使用QTE(QT Embedded)即可包括PC平台中X11和QT库的功能。
另一方面,嵌入设备受许多条件的限制,桌面系统也不能直接使用PC机上已有的系统。QTOPIA就是相当于KDE的桌面系统.根据具体嵌入设备的需要可以配置成phone和pocket pc两种。

2. 准备工作
2.1 目标
首先要明确将要干的是什么,将怎么做。
我们的目标很明确——就是在自己的开发板上使用基于QTE的桌面系统QTOPIA。
我们的工作往往是先在PC完成以后移植到ARM平台上;先编译好QTE的库,再编译QTOPIA。因为这个系统和具体的设备有关(例如:触摸屏、时钟、电源管理设备等),所以最后还需要做设备接口的移植工作。

2.2 软件包
系统平台:RedHat 9(完全安装)
qt-embedded-2.3.7.tar.gz (qte的库)
qt-x11-2.3.2.tar.gz (为了生成相应的qtdesigner和qvfb)
qtopia-free-1.7.0.tar.gz (qte的桌面环境程序)
tmake-1.11.tar.gz (编译时会用到)
e2fsprogs-1.35.tar.gz (只使用其中的uuid的库)
当下载完这些包以后我们先建立一个工作环境。假设所有软件包都下载在用户目录下,通常都是/root。

2.3 环境的建立
# cd ~
# mkdir x86-qtopia

# tar zxvf qt-x11-2.3.2.tar.gz
# mv qt-2.3.2 qt-x11

# cd x86-qtopia
# tar zxvf ../tmake-1.11.tar.gz
# tar zxvf ../qt-embedded-2.3.7.tar.gz
# tar zxvf ../qtopia-free-1.7.0.tar.gz
# tar zxvf ../e2fsprogs-1.35.tar.gz
# mv tmake-1.11 tmake
# mv qt-2.3.7/ qt
# mv qtopia-free-1.7.0 qtopia
# mv e2fsprogs-1.35 e2fsprogs

# cp x86-qtopia arm-qtopia -rf
记住,用户目录下的x86-qtopia目录是PC机上编译的工作环境,arm-qtopia是arm平台的交叉编译工作环境,qt-x11是两者公用的。

接下来还必须编译qt-x11,主要是为了编译生成其中的qtdesigner和qvfb。qvfb程序在系统中并未安装,需要我们自己编译。qtdesigner是和qt库的版本是相关的,当我们使用PC机上和QTE版本不符的qtdesigner时,可能在PC机上的qt-x11能使用的控件在QTE上并未实现,导致应用程序编译不成功。所以,我们使用2.3版本的QTE时,必须使用相同版本的qt-x11编译生成的qtdesigner和qvfb。
# cd ~/qt-x11
# export QTDIR=$PWD
# echo yes | ./configure -static -no-xft -no-opengl -no-sm
# make -C src/moc
# cp src/moc/moc bin
# make -C src
# make -C tools/designer
# make -C tools/qvfb
# cp tools/qvfb/qvfb bin
# strip bin/uic bin/moc bin/designer bin/qvfb
# cp qt-x11/bin/* qt/bin -f
# cp qt-x11/bin/* qt/bin -f

3. PC平台编译
编译之前做一下准备工作:打开一个控制台之后设置环境变量。
# cd ~/x86-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH

3.1 编译QTE
# cd $QTDIR
# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f
# (echo yes ; echo no) | ./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
# make -C src clean
# make -C src
看一下$QTDIR目录下是否已经有了qt的库了?

3.2 编译QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make

3.3 测试QTOPIA
激动的时刻来了,如果这个步骤成功将意味着可以做应用开发了。
# cd ~/x86-qtopia
# mkdir dist
# cd dist
# cp -af ../qt/lib/ .
# cp -af ../qtopia/apps .
# cp -af ../qtopia/bin .
# cp -af ../qtopia/plugins .
# cp -af ../qtopia/i18n .
# cp -af ../qtopia/pics .
因为Security.png有点错误,所以必须进行一下操作:
# cd pics
# pngtopnm Security.png>a.pnm
# pnmtopng a.pnm>Security.png
因为qpe运行的时候,当前目录必须是$QTDIR/bin,所以不能在$QTDIR目录下执行bin/qpe来运行。
# export QTDIR=~/x86-qtopia/qt
# cd $QTDIR/bin
# ./qvfb &
# ./qpe &
看到qpe在qvfb中的界面了吗?我看到了~!

4. 目标平台交叉编译
与PC机上的编译一样,打开一个控制台之后需要设置环境变量。
# cd ~/arm-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
4.1 交叉编译QT

4.2 交叉编译QTOPIA

5. 移植QT中的相关设备接口
5.1 鼠标

5.2 触摸屏

6. 移植QTOPIA中的相关设备接口
6.1 电源管理设备

7. 编写QT程序并移植

8. 编写QTOPIA程序并移植
X. tips
@ 移植的时候编译器的版本很重要.qte-2.3.7在redhat9的3.2编译器下工作很正常,但在Fedora4的gcc-3.4.2编译器下编译却不成功.根据测试,PC平台上使用gcc-3.2可以顺利编译,arm平台上使用gcc-2.95.2可以顺利通过(gnuarm的编译器好像不行,用华恒光盘中的armv4l-unkown-linux-gcc的可以编译通过)
@ 编译过程中会提示缺少uuid的头文件和库,下载e2fsprogs-libs-1.38.tar.gz,里面有uuid的相关代码.
@ 编译的时候需要指定编译器,在qt的configs目录下有许多文件,修改linux-arm-g++-*这些文件中的相关定义.例如:默认使用arm-linux-gcc编译器,而我使用的是GNUARM的arm-elf-gcc编译器,替换文件中所有arm-linux-前缀为arm-elf-即可.

B. Qt下如何编写C++程序

QT是基于消息-槽机制的
类似MFC,可以手写界面上的按钮或者文本框,也可以用QT自带的拖拽工具,我原来用QT4写过FTP的服务器端和客户端,基本上是用C++写的,然后用makefile编译,基本技术就是用TCP+并发操作来实现的。
你自己在网上找找相应的例子吧,不太难~~
祝你学习顺利!

C. qtcreator如何执行make clean

重新生成配置文件, 再次编译即可~··。
写一个函数..onClean(){文本框1->clean();文本框2->clean();文本框3->clean();}点击按钮或别的事件触发时就调用那个函数就ok了..
只能说有可能成功。make的工作原理是依赖output的时间戳,如果前一次make留下的内容不完全正确,有可能不会trigger重新编译的。make clean一下比较放心。这具体要看你的makefile是怎么写的了。如果你的库文件也是一个编译目标的话,就不用make clean,因为在make的时候,系统会自动的编译的改动过的库文件;如果你的库文件只是单独的一个编译附加条件的话,那么编译器可能不会去编译它。如果不确定的话,就先make clean一下。再编译吧,这样可能稳妥一些,特别是你如果改变了环境变量等。

D. 我在windows下用QT写了个程序,把这个源代码直接在linux下编译可以吗

可以,只要你不调用Windows的API函数就可以。 还有你在不同的系统可以使用条件编译那样就不存在任何问题了

E. 如何让 qt mingw 编译vtk

设置三个变量(a,b,c),对应三个按键 初值都是0, 一个按键按下后,对应的变量赋值1(a,b,c=1), 之后判断语句,判断条件中三个变量间进行与操作

F. QT if多个判断条件

编写一个简单的ping测试脚本,由用户输入起始和中指IP地址。
其中需要判断用户输入的IP地址必须是0-255的访问,使用if语句进行条件判断如下:if["${beginum}"-lt0]||["${beginnum}"-gt255]||["${endnum}"-lt0]||["${endnum}"-gt255],运行的时候报错,经过几次尝试才知道这种if[条件1||条件2]格式只能支持最多2个条件。if[[条件1||条件2||条件3||条件N]]使用这种双重中括号的形式能够支持多个条件。

G. arm嵌入式linux qt入门问题请教

1.qt-x11是支持x11库的qt,用于linuxPc运行环境。qt-embedded是用于嵌入式环境的qt库。
2.可以,只要选对了交叉编译器。
3.qmake是用来生产makefile的,make是通过makefile文件编译成可执行文件的。
4.他是嵌入式的qt库不仅能编译成arm平台的也可以编译成其它平台的,比如mips平台。
5.没有,要适应在真机上调试。
6.qt有个qtconf文件你可以通过修改该文件条件编译qt库,这样可减小qt库的体积,不过有些qt的方法会因为条件编译的qt库儿无法使用。
7.这个需要适配,有时要简单修改一下qt代码。
8.根据qt版本选择,qt的版本高就选择高版本的编译器。编译qt2一定要用2.95.3,qt4用3.4.1。
9.只要配上相应的qt库就可以运行,要运行qt4就需要你自行编译qt4的库。

H. QT程序怎么移植到开发板并运行

需要的条件:
1.上位机编译好的可执行文件,以hello为例
在虚拟机的Ubuntu下,写好代码之后,定位到当前目录,执行命令
$ qmake -project //生成工程文件.pro
$ qmake //生成makefile
$ make //生成可执行文件hello
注意这些命令是在arm版的qt环境下的编译命令!执行qmake -v可查看其是否是arm版本,使用的是否是arm的库!执行file hello 可以查看hello是否是arm下运行的程序!
2.移植好QT库的开发板
刚开始学,只需要移植最基本的几个库就行了!触摸屏的、鼠标的、键盘的以后再说!分别是:libQtGui.so libQtCore.so libQtNetwork.so 以及fonts下的字库
为了防止错误,我一并把他们的相关链接文件so.4、 so.4.7、 so.4.7.2 都移植过去了!
移植方法你可以使用nfs !U盘!我用nfs速度太慢,非常不方便,索性用U盘拷过去了!因为这几个库小的不到1M,大的13M,U盘拷的还是很快的!比较让我费劲的是虚拟机不支持把链接文件拖拽到xp环境下!我只要在虚拟机里用邮件发到我的邮箱里,再在xp环境下把这些东西下下来,再通过U盘拷贝!曲折啊。。。我的虚拟机U盘不识别!
1)从哪儿移植呢?
从你虚拟机里编译安装arm版的QT库里面拷!..arm/lib下
2)移植过去放在哪儿呢?
最好是跟你在虚拟机里面的arm版QT所在目录一样,方便操作!看我的
分别在开发板下新建目录:home/fengchao/qtenv/arm/lib
home/fengchao/qtenv/arm/bin
home/fengchao/qtenv/arm/lib/fonts
把那些.so文件放到lib里面,把字库放到fonts里面!
3.最重要的一步,设置环境变量!
在开发板的根目录下执行:
$ vi /etc/profile
然后输入
export QTDIR=/home/fengchao/qtenv/arm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

保存退出! ok !
vi使用:打开文件之后,输入i,进入编辑模式,再按ESC退出编辑模式进入命令模式,输入:键入命令wq即保存退出,q退出

4.然后把你编译好的hello这个可执行文件放到你的开发板上,随便哪儿吧
然后执行
./hello -qws
然后你就可以看见开发板上有显示了!但是可能文字较小,如果有中文可能还是乱码,没事,咱一步步往下来。。。
5.错误分析
1)提示没有链接到字库
QFontDatabase: Cannot find font directory /home/fengchao/qtenv/arm/lib/fonts - is Qt installed correctly?
这个就是你没装好字库,好好检查一下,修改过来!
2)提示没有QtGui.so no such file of directory
也是因为你没有移植好这个库或者跟他链接的文件,再或者环境变量有误!

I. qt如何设置宏区分同一个平台多套件编译

在pro里面定义一个宏,然后在代码中根据这个宏进行条件编译。

下面是一个示例:

网页链接

J. QT是什么原理如何实现跨平台

java一样,针对每一种OS平台,QT都有一套对应的底层类库,而接口是完全一致的。
因此只要是在QT库上开发的程序,放在任何一种平台下都可以编译运行(前提条件是:程序中没有使用某OS特有的机能)。

也就是说在OS和应用层之间,增加了一个平台层来保证可移植性。

阅读全文

与qt指定条件编译条件相关的资料

热点内容
我的世界无尽贪婪奇点压缩器 浏览:391
源码资源免费分享网 浏览:684
批量qq号有效验证源码 浏览:511
本科程序员五年工资 浏览:899
创维电视柜怎么安装app 浏览:850
可爱的程序员陆漓剧照 浏览:850
怎样把截屏压缩成300kb 浏览:224
dart文件加密 浏览:39
java对接摄像头源码 浏览:885
安卓项目开发实例附源码 浏览:728
程序员苹果全家桶 浏览:197
远程命令阻塞 浏览:731
有网页源码怎么查数据 浏览:100
win10下make编译速度过慢 浏览:866
微机原理编译环境 浏览:19
怎么把图纸转换成pdf 浏览:541
安卓libcurl编译64 浏览:905
手机app怎么测速 浏览:276
中兴gpon命令 浏览:885
python中取出字典key值 浏览:682