qt的建立.docx
《qt的建立.docx》由会员分享,可在线阅读,更多相关《qt的建立.docx(11页珍藏版)》请在冰豆网上搜索。
![qt的建立.docx](https://file1.bdocx.com/fileroot1/2022-11/30/a6ca1b99-0d36-4238-a702-1a0c3bd1e4a6/a6ca1b99-0d36-4238-a702-1a0c3bd1e4a61.gif)
qt的建立
4.1tmake安装
tarxfvztmake-1.11.tar.gz
mvtmake-1.11tmake
exportTMAKEDIR=$PWD/tmake
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
4.2QT编译
tarxfvzqt-x11-2.3.2.tar.gz
mvqt-2.3.2qt-x11
cdqt-x11
exportQTDIR=$PWD
echoyes|./configure-static-no-xft-no-opengl-no-sm
make-Csrc/moc
cpsrc/moc/mocbin
make-Csrc
make-Ctools/designer
make-Ctools/qvfb
cptools/qvfb/qvfbbin
stripbin/uicbin/mocbin/designerbin/qvfb
4.3QTE编译
tarxfvzqt-embedded-2.3.7.tar.gz
mvqt-2.3.7/qt
cpqt-x11/bin/?
*qt/bin
exportQTDIR=$PWD/qt
exportQPEDIR=$PWD/qtopia
exportTMAKEDIR=$PWD/tmake
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
exportPATH=$QTDIR/bin:
$QPEDIR/bin:
$TMAKEDIR/bin:
$PATH
cdqt
makeclean
cp../qtopia/src/qt/qconfig-qpe.hsrc/tools/
(echoyes;echoyes)|./configure-platformlinux-generic-g++-qconfigqpe-depths16,24,32
make-Csrc
4.5QPE编译
tarxfvzqtopia-free-1.7.0.tar.gz
mvqtopia-free-1.7.0qtopia
#tarxfvze2fsprogs-1.35.tar.gz
#cde2fsprogs-1.35
exportLD_LIBRARY_PATH=$QTDIR/lib:
$QPEDIR/lib:
$LD_LIBRARY_PATH
#./configure
#make
#makeinstalllib/uuid/
将e2fsprogs-1.35/lib/目录下uuid的文件夹复制到qtopia/include下
将e2fsprogs-1.35/lib/中的libuuid.a复制到/qtopia/lib下
cdqtopia/src
./configure-platformlinux-generic-g++
make
当在PC上模拟Qtopia的运行时,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt(Redhat安装时带有Qt库,但不适合我们最新安装的版本),修改后的ld.so.conf文件内容如下:
/wu2410/qt/lib
/wu2410/qtopia/lib
/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/sane
修改完此文档后,为了让刚刚安装的库生效,必须运行ldconfig。
至此Qt的开发缓建已经建立
(1)设置环境变量
exportQTDIR=$PWD/qt
exportQPEDIR=$PWD/qtopia
exportTMAKEDIR=$PWD/tmake
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
exportPATH=$QTDIR/bin:
$QPEDIR/bin:
$TMAKEDIR/bin:
$PATH
(2)启动虚拟帧缓存
qvfb&
或qvfb-width640–height480&
(3)运行qtopia
qpe&
=====================================================================
1.Preparesoftwareandcross-compiletoolchain
xscalev1.tar.gzarm交*编译工具链
e2fsprogs-1.35.tar.gz用于编译生成libuuid库
tmake-1.11.tar.gz生成makefile
qt-embedded-2.3.7.tar.gzQt/Embedded
qt-x11-2.3.2.tar.gzQt/X11
qtopia-free-1.7.0.tar.gzQtopia
Supposethatwesavethesesoftwareto/root/qt-arm
2.Installtoolchain这里使用的是xscale板子提供的交*编译工具链
cd/root/qt-arm
tarzxvfxscalev1.tar.gz
mvxscalev1/opt/
vi~/.bash_profile添加到PATH路径
PATH=/opt/xscalev1/bin:
$PATHadd
source~/.bash_profile
3.Installtmaketmake用于交*编译生成qt应用程序的makefile,也可用于生成qt的本地makefile,区别在于设置TMAKEPATH路径的不同,一个用于arm,一个用于x86。
注意:
tmake机子上本来就有的,但我们要使用11以上的版本,如果是11以上的版本可以不用安装。
tmake–v查看一下它的版本,有些版本比较老,建议换掉,同时把以前的tmake可执行文件删掉
tmake使用:
在某个qt工程文件夹内
qmake–project生成工程文件假定工程文件夹名hello
tmakehello.pro–oMakefile生成makefile
make编译连接成可执行文件
cd/root/qt-arm
tarzxvftmake-1.11.tar.gz
vitmake-1.11/lib/qws/linux-arm-g++/tmake.conf
TMAKE_LINK=arm-linux-g++//将原来的arm-linux-gcc改成arm-linux-g++
TMAKE_LINK_SHLIBS=arm-linux-g++
mvtmake-1.11/usr/local/
vi~/.bash_profile添加以下一些信息
PATH=/usr/local/tmake-1.11/bin:
$PATH遖dd
TMAKEPATH=/usr/local/tmake-1.11/lib/qws/linux-arm-g++
exportPATH
exportTMAKEPATH
source~/.bash_profile
假如不用这种方法,可以直接用:
exportPATH=$PWD/tmake-1.11/bin:
$PATH
exportTMAKEPATH=$PWD/tmake-1.11/lib/qws/linux-arm-g++
4.Installe2fsprogs为arm编译libuuid库
cd/root/qt-arm
tarzxvfe2fsprogs.tar.gz
cde2fsprogs
mkdirbuild
cdbuild
../configure--enable-elf-shlibs--build=i386-linux--host=arm-linux--with-cc=/opt/xscalev1/bin/arm-linux-gcc--with-linker=/opt/xscalev1/bin/arm-linux-ld
make
其中lib/libuuid.so.1.2libuuid.so.1libuuid.so即是我们需要编译的库
5.UnpackQtopiacd/root/qt-arm
tarzxvfqtopia-free-1.7.0.tar.gz
cdqtopia-free-1.7.0
exportQPEDIR=$PWDQPEDIR环境变量下面要用到
6.InstallQt/Embeddedcd/root/qt-arm
tarzxvfqt-embedded-2.3.7.tar.gz
cdqt-2.3.7
exportQTDIR=$PWD
exportQTEDIR=$PWD
exportPATH=$PWD/bin:
$PATH
exportLD_LIBRARY_PATH=$PWD/lib:
$LD_LIBRARY_PATH
visrc/kernel/qwsmouse_qws.cpp修改触摸屏驱动,详见附件
cp$QPEDIR/src/qt/qconfig-qpe.hsrc/tools/
./configure-shared-xplatform–thread–no-xftlinux-arm-g++-qconfigqpe-depths4,8,16,32
依次输入yes,no
visrc/Makefile
add"-DQWS_CUSTOMTOUCHPANEL"into"QT_CXXFLAGS_OPT"
makesub-src
其中lib目录下的libqte.so.2.3.7即是我们需要的qte库,还有一些支持多线程的库
7.InstallQt/X11编译qt-x11-2.3.2并非是用来开发,而是Virtual为了产生编译qtopia必须的库以及用于在图形环境下进行调试的qvfb(QtVirtualFrameBuffer)。
这里安装qtopia时之要编译qt-2.3.2,是为了使用qt-2.3.2生成的uic,所以要用gcc/g++编译,不要用arm-linux-gcc/g++编译。
注意不能直接用/usr/bin/uic,读者自己比较。
cd/root/qt-arm
tarzxvfqt-x11-2.3.2.tar.gz
cdqt-2.3.2/
viconfigs/linux-g++-shared修改语句
SYSCONF_CXXFLAGS_X11=-I/usr/include/freetype2斜体为我们要修改的语句
exportQTDIR=$PWD
exportPATH=$PWD/bin:
$PATH
exportLD_LIBRARY_PATH=$PWD/lib:
$LD_LIBRARY_PATH
./configure–no-xft
make
make-Ctools/qvfb/
cptools/qvfb/qvfbbin/
./bin/qvfb&x11-FrameBuffer就运行起来了
cpbin/uic$QPEDIR/bin/
cpbin/uic$QTEDIR/bin/
8.BuildQtopiacd/root/qt-arm/qtopia-free-1.7.0
cp/root/qt-arm/e2fsprogs/build/lib/libuuid.so*/opt/xscalev1/lib/
cp/root/qt-arm/e2fsprogs/build/lib/libuuid.so*/opt/xscalev1/arm-linux/lib/
cp-a/usr/include/uuidinclude/
exportQTDIR=$QTEDIR
exportPATH=$PWD/bin:
$PATH
exportLD_LIBRARY_PATH=$PWD/lib:
$LD_LIBRARY_PATH
cdsrc/
./configure-xplatformlinux-arm-g++需要交*编译
make
9.Runningapplication运行程序有两种方式,一种是把相应的库和应用程序下载到板子上,另一种是通过nfs方式。
9.1runningapplicationinboard
将qt-2.3.7/lib目录下载到板子上/usr/local/qt-embedded/目录下
将qtopia-free-1.7.0目录下的文件(要做一些裁减工作,把不必要的文件删除)下载到/usr/local/qtopia目录下
Minicom登陆到开发板上
下载步骤略
exportLD_LIBRARY_PATH=/usr/local/qt-embedded/lib:
$LD_LIBRARY_PATH
exportLD_LIBRARY_PATH=/usr/local/qtopia/lib:
$LD_LIBRARY_PATH
cd/usr/local/qtopia/bin
./qpe–qws&运行qpe程序,移植成功
9.2runningapplicationthroughnfs
首先我们的pc机要开启nfs服务,详见开发板网络配置文档
Pc机:
vi/etc/exports
/*(rw,no_root_squalsh)
/etc/rc.d/init.d/nfsstart开启nfs服务
netstat–au查看是否开启nfs服务,如果没有查看防火墙
开发板:
Minicom登陆到班子上
mount–tnfs–otcp192.168.1.22:
/root/qt-arm/mnt/qt-arm
cd/mnt/qt-arm
cdqt-2.3.7
exportLD_LIBRARY_PATH=$PWD/lib:
$LD_LIBRARY_PATH
cd../qtopia-free-1.7.0
exportLD_LIBRARY_PATH=$PWD/lib:
$LD_LIBRARY_PATH
cdbin
./qpe–qws运行qpe程序,移植成功
附件1:
触摸屏修改程序
classQCustomTPanelHandlerPrivate:
publicQWSMouseHandler{
Q_OBJECT
public:
QCustomTPanelHandlerPrivate(MouseProtocol,QStringdev);
~QCustomTPanelHandlerPrivate();
private:
intmouseFD;
unsignedcharprevstate;
privateslots:
voidreadMouseData();
};
QCustomTPanelHandlerPrivate:
:
QCustomTPanelHandlerPrivate(MouseProtocol,QString){
#ifdefQWS_CUSTOMTOUCHPANEL
if((mouseFD=open("/dev/ts",O_RDONLY))<0){
qWarning("Cannotopen/dev/ts(%s)",strerror(errno));
return;
}else{
sleep
(1);
}
QSocketNotifier*mouseNotifier;
mouseNotifier=newQSocketNotifier(mouseFD,QSocketNotifier:
:
Read,this);
connect(mouseNotifier,SIGNAL(activated(int)),this,SLOT(readMouseData()));
#endif
}
QCustomTPanelHandlerPrivate:
:
~QCustomTPanelHandlerPrivate(){
if(mouseFD>=0)
close(mouseFD);
}
structCustomTPdata{
unsignedcharstatus;
unsignedshortxpos;
unsignedshortypos;
};
voidQCustomTPanelHandlerPrivate:
:
readMouseData()
{
if(!
qt_screen)
return;
CustomTPdatadata;
shortdata2[4]={0};
intret;
ret=read(mouseFD,data2,sizeof(data2));
if(ret){
data.status=data2[0];
data.xpos=data2[1];
data.ypos=data2[2];
QPointq;
q.setX(data.xpos);
q.setY(data.ypos);
mousePos=q;
if(data.status&&!
prevstate){
emitmouseChanged(mousePos,Qt:
:
LeftButton);
}elseif(!
data.status&&prevstate){
emitmouseChanged(mousePos,0);
}
prevstate=data.status;
}
if(ret<0){
qDebug("Error%s",strerror(errno));
}
}
========================================================================================
准备以下源码包和文件(可以从网上下载)
tmake-1.11.tar.gz
qt-embedded-2.3.7.tar.gz
qt-x11-2.3.2.tar.gz
qconfig-local.h
假设源码包放在/home/build_qte/目录下
cd/home/build_qte/
1tmake配置
tarzxvftmake-1.11.tar.gz;解压tmake源码包
cdtmake-1.11;进入解压目录
vienv.sh;建立shell文件,在文件中添加如下内容
exportTMAKEDIR=$PWD
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportPATH=$TMAKEDIR/bin:
$PATH
保存退出.
sourceenv.sh;添加环境变量
cd..;退出tmake-1.11目录
2配置编译qt-embedded源码包
tarzxvfqt-embedded-2.3.7.tar.gz
mvqt-2.3.7qt-2.3.7-x86
cdqt-2.3.7-x86
cp/home/build_qte/qconfig-local.hsrc/tools/;qconfig-local.h文件在开发板提供的光碟上可以找到
vienv.sh;添加如下内容
exportQTDIR=$PWD
exportQTEDIR=$QTDIR
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
exportPATH=$QTDIR/bin:
$PATH
;保存退出.
sourceenv.sh;添加环境变量
./configure-qconfiglocal-gif-thread-qvfb-depths4,8,16,32;配置源码包
makesub-src;编译
cd..
3配置编译qt-x11源码包
tarzxvfqt-x11-2.3.2.tar.gz
cdqt-2.3.2
exportQTDIR=$PWD
exportPATH=$QTDIR/bin:
$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
./configure-no-xft-no-opengl
make
make-Ctools/qvfb
cptools/qvfb/qvfb$QTEDIR/bin/
cpbin/uic$QTEDIR/bin
cd..
;退出终端!
4实例
;建立qte开发的工作目录
mkdir/home/qte
cd/home/qte
;建立shell文件,设置环境变量
viset-qte-x86.sh
;在文件中添加如下
#!
/bin/bash
exportQTDIR=/home/build_qte/qt-2.3.7-x86;编译qt-2.3.7的目录
exportLD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH
exportTMAKEDIR=/home/build_qte/tmake-1.11;tmake-1.11的目录
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportPATH=$QTDIR/bin:
$TMAKEDIR/bin:
$PATH
echo$PATH
;保存退出
;先不要执行sourceset-qte-x86.sh(不要设置环境变量)
;建立工程目录
mkdirhello
cdhello
;用designer生成工程文件(hello.pro),窗体文件(hello.ui),和main.cpp文件.
progen-nhello-ohello.pro
cd..
sourceset-qte-x86.sh;设置环境变量
cdhello
;生成源文件
uichello.ui-ohello.h
uichello.ui-ihello.h-ohello.cpp
删除hello.pro,hello.ui文件,省下hello.h,hello.cpp,main.cpp三个文件
progen-ohello.pro;生成工程文件
tmakehello.pro-oMakefile;生成Makefile文件
make;开始编译
;在PC机的模拟执行
qvfb&
;新建终端,在新建的终端中执行如下
cd/home/qte
sourceset-qte-x86.sh
cdhello
./hello-qws;执行刚才编译的hello.