您的位置:首页 > 编程语言 > Qt开发

利用博创2410s实验箱进行qt开发经验总结(上)

2008-12-26 14:03 531 查看
利用博创2410s实验箱进行qt开发经验总结[/b]
[/b]
注,指导书的错误有:[/b]
1.理论上完全可以复制指导书中的命令,粘贴就可执行,但是指导书中许多“-”号是全角下的“-”,必须是半角的“-”才可以;
2.前两个实验中的环境变量设置命令里,多了host和target目录;
3.在最后一个实验复制库文件的时候,说是直接cp,但是这样会出错。最保险的方法是先压缩这些库文件,然后解压到目标板相应的位置。
4.这些隐形的错误害了我太多时间了,非常痛恨博创。

3.1安装与建立Qt 桌面运行环境

一、实验目的
1. 了解在Linux 下安装Qt 以及Qt/Embedded 的基本步骤;
2. 学会在Qt/E 平台下使用Virtual framebuffer 显示程序结果;
二、实验内容
1. 在Linux 下编译和使用Qt/E 平台;
2. 在Qt/E 平台下编译和运行一个程序使用Virtual framebuffer 显示运行结果;
三、预备知识
1. 熟悉使用C++语言程序设计;
2. 掌握Linux 下常用编辑器的使用;
3. 掌握Linux 下程序编译;
4. 熟悉Qt 程序设计;
四、实验室设备和工具
硬件:PC 机Pentumn500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境
tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2 .tar.gz
五、实验步骤
在Trolltech公司的网站上可以下载该公司所提供的Qt/Embedded 的免费版本,在安装
产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410s/gui/Qt/src 下。在做实
验前把本次实验用到的三个文件拷贝到/root/2410sQt 目录下。
[root@BC root]#cd /root/
[root@BC root]#mkdir 2410sQt
[root@BC root]#cd 2410sQt
[root@BC 2410sQt]#mkdir host
[root@BC root]#cd /arm2410s/gui/Qt/src
[root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz /root/2410sQt/host
安装编译器arm-linux-gcc-3.4.1:
[root@BC src]#cd /arm2410s/gui/Qt/tools
[root@BC tools]#tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C ./
[root@BC tools]#vi /root/.bash_profile //打开文件
将该文件中的PATH 变量改为PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools
/usr/local/arm/3.4.1/bin/,存盘后退出。
[root@BC tools]# source /root/.bash_profile
如果安装正确的话,在任意路径下输入ar 后按Tab 键即可列出编译器文件。
Qt/Embedded 平台的搭建需要以下几步:
第一步,解压安装包并设置环境变量
1.安装Tmake
cd ~/2410sQt/host
tar -xzf tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
(这里指导书错了,多了host在里面,也害了我很多时间)
2.安装Qt 2.3.2
cd ~/2410sQt/host
tar -xzf qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
(这里指导书错了,多了host在里面,也害了我很多时间)
3.安装Qt/Embedded
cd ~/2410sQt/host
tar -xzf qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10
(这里指导书错了,多了host在里面,也害了我很多时间)
环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包,下面介
绍一下这些环境变量:
TMAKEDIR : 指向用于编译Qt/Embedded 的Tmake 工具
QT2DIR : 指向qt-2.3.2 的文件夹
QTEDIR : 指向qt-2.3.10 的文件夹
第二步,编译Qt/Embedded。
1. Build Qt2.3.2
cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft //出现选项时都输入yes
make
cp -arf bin/uic $QTEDIR/bin/
./configure 是对Qt 进行配置,它包括很多选项,例如可以通过添加“ -no-opengl”等,
如果想要进一步了解可以通过键入 ./configure --help 来获得更多的帮助信息。编译完成后
需要将生成的/bin/uic 复制到$QTEDIR 下新创建的目录bin 中,因为在随后编译
Qt/Embedded 的时候会用到这个工具。
2. Build Qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
/root/2410sQt/host/tmake-1.13/bin/tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中
qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上
的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开
发板上运行。
3. Build Qt/Embedded
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft -qvfb -depths 4,8,16,32
yes
5
make
在配置./configure 中-qvfb 用来支持Virtual framebuffer,-depths 4,8,16,32 支持4 位,8
位,16 位,32 位的显示深度,此外还可以添加如-syestem-jpeg 和-gif 来提供对jpeg 和gif
的支持。配置系统同时还支持对特定平台系统选项的添加,但一般来讲,凡是支持
framebuffer 的Linux 系统都可以使用“linux-generic-g++”平台。详细的配置信息可以通过
运行./configure --help 命令来查看。
第四步,查看运行结果,如果上面各步都能够成功的编译通过,下面就可以通过运行
Qt/Embedded 自带的demo 来查看运行结果。
●在Virtual framebuffer 上运行:
export QTDIR=$QTEDIR
export PATH=$QTEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/examples/launcher
qvfb -width 640 -height 480 &
sleep 10
./launcher -qws
运行结果如下:

图3.1-1 Qt/Embedded Demo 程序
将上面的步骤完成后,我们就已经建立好了在本机上开发Qt 应用程序的环境,下面
我们通过编写一个“Hello Embedded”的程序来了解Qt 程序设计。
[root@BC qt-2.3.10]# cd /root/2410sQt/host/
[root@BC 2410sQt]# mkdir exp
[root@BC 2410sQt]# cd exp
[root@BC exp]# vi hello.cpp
使用VI 编写文件hello.cpp,程序代码如下:
//hello.cpp
#include <qapplication.h>
#include <qlabel.h>
int main(int argc, char **argv)
{
QApplication app (argc, argv);
QLabel *hello = new QLabel("Hello Qt/Embedded!", 0);
app.setMainWidget(hello);
hello->show();
return app.exec();
}
现在开始逐行讲解一下每一句是什么意思,掌握了这些以后可以帮助我们更加了解Qt
的程序设计。
第1 行和第2 行包含了两个头文件,这两个头文件中包含了QApplication 和 QLabel
类的定义。
第5 行创建了一个QApplication 对象,用于管理整个程序的资源,它需要2 个参数,
因为Qt 本身需要一些命令行的参数。
第6 行创建了一个用来显示Hello Qt/Embedded!的部件。在Qt 中,部件是一个可视化
用户接口,按钮、菜单、滚动条都是部件的实例。部件可以包含其它部件,例如,一个应
用程序窗口通常是一个包含QMenuBar、QToolBar、QStatusBar 和其它部件的一个部件。
在QLabel 函数中的参数0 表示,这是一个窗口而不是嵌入到其它窗口中的部件。
第7 行设置hello 部件为程序的主部件,当用户关闭主部件后,应用程序将会被关闭。
如果没有主部件的话,即使用户关闭了窗口程序也会在后台继续运行。
第8 行使hello 部件可视,一般来说部件被创建后都是被隐藏的,因此可以在显示前根
据需要来订制部件,这样的好处是可以避免部件创建所造成的闪烁。
第9 行把程序的控制权交还给Qt,这时候程序进入就绪模式,可是随时被用户行为
激活,例如点击鼠标、敲击键盘等。
下面我们要让我们的程序跑起来,首先要让它能够在Virtual framebuffer 中显示出来,
然后再通过交叉编译在开发板上运行。
要在本机的Virtual framebuffer 中显示结果,下面几步是必须的:
1.生成工程文件(.pro)
每一个Qt 程序都对应着一个工程文件,因为tmake 工具要借此工程生成相应的
Makefile 文件。生成工程文件需要使用progen 工具,它的位置在$TMAKEDIR/bin 下,使
用progen 生成工程文件的方法如下:
$TMAKEDIR/bin/progen -t app.t -o hello.pro
生成的这个hello.pro 工程文件是可以被修改的,可以编辑里面的头文件、源文件等内
容。
2.生成Makefile 文件
Qt 提供了生成Makefile 文件的工具tmake,这极大地方便了应用程序的开发,节省了
大量的时间,而且还可根据不同平台的需要生成适合于不同平台的Makefile 文件。
在使用tmake 工具前,必须查看相应的环境变量是否正确,由于我们要编译在本机上
运行的Qt 程序,所以指定的编译器应该为“linux-x86-g++”,在命令行中输入下面的命令
来检查环境变量是否正确:
echo $TMAKEPATH
查看返回的结果的结尾字符是否是“……/qws/linux-x86-g++”,如果不是的话需要在
命令行中重新设置TMAKEPATH
export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-x86-g++
此外还要使QTDIR 指向Qt/Embedded 的安装路径,如:
export QTDIR=$QTEDIR 或者直接指定路径
export QTDIR=……/qt-2.3.10
完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工
具来生成我们需要的Makefile 文件,在命令行中输入如下命令:
$TMAKEDIR/bin/tmake -o Makefile hello.pro
完成上面的步骤以后就可以在当前的目录中生成一个Makefile 文件,关于Makefile
文件的功能和结构这里就不再做过多的介绍了,可以参考前面的章节来了解Makefile。
最后在命令行中输入 “make”命令就可以对整个程序进行编译链接了,最终生成了一
个二进制的可执行文件hello。用Virtual framebuffer 显示效果如下:

我们可以通过对QLabel *hello = new QLabel("Hello Qt/Embedded!", 0)这句进行修改,
使我们的程序显示起来更为美观,修改如下:
QLabel *hello=new QLabel("<h2><fontcolor=blue>Hello"

修改后显示效果如图所示:

图3.1-3 修改后Hello Embedded

3.2 Qt Designer 简介以及Qt/E 的交叉编译

一、实验目的
1. 了解Qt Designer 的使用方法以及Qt/Embedded 交叉编译的基本步骤;
2. 学会在使用Qt Designer 编写程序,交叉编译,在开发板上运行;
二、实验内容
1. 在Linux 下使用Qt Designer;
2. 在Qt Designer 下编写程序,完成交叉编译并在开发板上运行;
三、预备知识
1. 熟悉使用C++语言程序设计;
2. 掌握Linux 下常用编辑器的使用;
3. 掌握Linux 下程序编译;
4. 熟悉Qt 程序设计;
四、实验室设备和工具
硬件:PC 机Pentumn500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境
五、实验步骤
Qt 提供了非常强大的GUI 编辑工具— Qt Designer,它的操作界面类似于Windows 下
的Visual Studio,而且它还提供了相当多的部件资源。

图3.2-1 Qt Designer 丰富的部件资源
下面我们来介绍一下Qt Designer 的开发环境以及使用Qt Designer 的开发过程,下面
所示的图3-5 为我们使用的Qt/X11 2.3.2 中自带的v 1.1 版的Qt Designer。

无论我们是采用Qt Designer 还是纯手工编写代码都需要经过下面的几个步骤:
●创建和初始化子部件
●设置子部件的布局
●设置Tab 键的次序
●建立信号与插槽的连接
下面我们透过一个简单的例子,来熟悉一下Qt Designer。我们编写的窗体主要包括下
面几个部件:一个CheckBox,一个PushButton,一个Silder,一个dial,一个LCDNumber,
一个ProgressBar;要实现的功能是点击PushButton 会选中CheckBox;拖动Silder 同时,
Dial、LCDNumber 和ProgressBar 会随其发生变化。

图3.2-3 布置部件
在布置部件时,我们可以不必要非常准确的放好每个部件的位置,因为Qt Designer
自带的lay out 功能回自动帮我们实现。将全部部件都选中,使用Layout|in a Gird 网格布局。

图3.2-4 使用Layout 布局管理后
将部件布置好后,就可以根据我们的需要来建立连接,Qt 开创性的使用了信号与插槽
机制,与传统的回调函数方式不同,它是一种灵活、类型安全、快速、完全面向对象的C++
机制。
使用传统的回调函数机制来关联某段代码和和一个按键,需要有一个指向函数的指针,
并且将这个指针地址传给按钮。当这个按钮被按下,这个函数就会被执行。以前的工具包
不能保证函数被执行时所传递的类型是正确的,这使得进程很容易崩溃。另一个问题是,
这种回调方法紧紧得绑定了GUI 得基本功能元素,使得很难进行独立的分类开发。Qt 的
信号与插槽机制则不同,Qt 部件(Widgets)事件发生时发出信号,如一个按钮被点击时
会发出一个“clicked”信号。程序员可以选择建立一个函数(称为插槽)并调用connect
()函数来将这个信号与插槽连接起来。用户在编程时可以将两个对象捆绑在一起而不需
要知道每个对象的各自的信息,而且可以自己创建信号与插槽,发射自己的信号等等。
有关信号与插槽的具体内容请参考其它书籍,这里就不再过多介绍了。
建立连接要用到connect Singal/Solts (F3) 按钮,点击后只要用鼠标连接两个部
件就可以建立它们之间的连接。

图3.2-5 建立两个部件的连接
连接建立以后会自动出现编辑连接(Edit Connection)的对话框:

图3.2-6 编辑连接对话框
依次建立各个部件之间的连接后,可以通过点击Edit|Connections 来查看各个部件的连
接情况,还可以通过点击Edit 菜单来对连接进行修改。

图3.2-7 连接关系图
Qt 取消了传统的“编译、连接和运行”的方式,直接提供了Preview 功能,而且支持
不同平台的不同风格,比如常见的Windows 风格、Motif 风格等。

图3.2-8 Qt 的预览风格选择

图3.2-9 Qt Designer 的不同风格
将以上步骤做完后,我们就可以把我们设计的窗体保存起来,Qt 会将我们的窗体信息
保存成一个.ui 文件,使用Qt 提供的uic 工具可以方便的通过这个文件来生成.h 文件和.cpp
文件,假设我们将上面的窗体保存为win.ui,则具体操作如下:
uic -o win.h win.ui
uic -o win.cpp -impl win.h win.ui
完成了这两个命令后,我们会发现在我们的当前目录中会有win.h 与win.cpp 两个文
件,只有这两个文件程序还是不能运行的,我们还需要再创建一个main.cpp 文件,我们使
用vi 编辑器手工编写这个文件。
vi main.cpp
具体代码如下:
#include "win.h"
#include <qapplication.h>
int main(int argc,char **argv)
{
QApplication a(argc,argv);
Form1 form ;
form.setCaption("Form");
a.setMainWidget(&form);
form.show();
return a.exec();
}
要将我们写好的程序发布到开发板上,我们需要对Qt/Embedded 重新编译,与前面在
宿主机上编译类似,步骤如下:
[root@BC root]#cd 2410sQt
[root@BC 2410sQt]#mkdir targett
[root@BC root]#cd /arm2410s/gui/Qt/src
[root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz /root/2410sQt/target
第一步,解压安装包并设置环境变量
1.安装Tmake
cd ~/2410sQt/target
tar -xzf tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
2.安装Qt 2.3.2
cd ~/2410sQt/target
tar -xzf qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
3.安装Qt/Embedded
cd ~/2410sQt/target
tar -xzf qt-embedded-2.3.10-free.tar.gz
export QTEDIR=$PWD/qt-2.3.10
第二步,编译Qt/Embedded。
1.Build Qt2.3.2
cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft //出现选项时都输入yes
make
cp -arf bin/uic $QTEDIR/bin/
2. Build Qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
/root/2410sQt/target/tmake-1.13/bin/tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
3.Build Qt/Embedded
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
这步完成后,我们会在$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3
libqte.so.2.3.10 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在
开发板上跑的库。
file libqte.so.2.3.10
libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped
有了这个库以后我们就可以把它拷贝到我们的开发板中相应的库目录下面,这里我们
选择了开发板上的/usr/lib 目录,将$QTEDIR/lib/下的libqte.so*复制到/usr/lib 目录下。首先
要建立宿主机和开发板的通讯,假设本机的ip 地址为192.168.0.56 并且/root/share 为共享
文件夹。
mount -t nfs -o nolock 192.168.0.56:/root/share /host //在开发板端
将文件复制到开发板上
cp -arf /$QTEDIR/lib libqte.so* /root/share //在PC 端
cp -arf /mnt/nfs/libqte.so* /usr/lib //在开发板端
复制时可能提示没有空间,在yaffs 下删除一些无关程序以获取空间。
1. 修改tmake 配置文件
vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
将其中“TMAKE_LINK= arm-linux-gcc”
“TMAKE_LINK_SHLIB= arm-linux-gcc”
修改为:“TMAKE_LINK= arm-linux-g++”
“TMAKE_LINK_SHLIB= arm-linux-g++”
2. 生成可执行文件
这里我们采用了Qt/Embedded 自带的一个demo,它在$QTEDIR/examples/progressbar
目录下, 这个目录包括下面几个文件: main.cpp 、Makefile.in 、progressbar.h 、
Makefile、progressbar.cpp、progressbar.pro,如果已经有了progressbar 的执行文件,可以使
用make clean 删除。
在这里已经有了工程文件progressbar.pro,这个是Qt 已经配置好的,一般情况下我们
自己编写程序事需要progen 工具来生成这个文件的,以这个程序为例
$TMAKEDIR/bin/progen -t app.t -o progressbar.pro
在使用tmake 工具生成makefile 文件之前,我们要确保tamke 工具的路径是正确的,
可以采用echo 名来来查看
echo $TMAKEPATH
查看返回的结果的结尾字符是否是“……/qws/linux-arm-g++”,如果不是的话需要在
命令行中重新设置TMAKEPATH
export TMAKEPATH=/tmake 的安装路径(如$TMAKEDIR)/lib/qws/linux-arm-g++
此外还要使QTDIR 指向Qt/Embedded 的安装路径,如:
export QTDIR=$QTEDIR 或者直接指定路径
export QTDIR=……/qt-2.3.10
完成了上面的环境变量的设置,并用echo 命令检查无误以后,就可以使用tmake 工
具来生成我们需要的makefile 文件,在命令行中输入如下命令:
$TMAKEDIR/bin/tmake -o makefile progressbar.pro
make
如果没出现错误的话就可以在当前目录下找到progressbar 这个可执行文件,将该程序
复制到/root/share 下,然后在开发板端进行如下操作:
[/mnt/yaffs]#mount -t nfs 192.168.0.56:/root/share /host
[/mnt/yaffs]#cd /host
[/host]#export QTDIR=/usr
[/host]#cd /usr/lib
[/mnt/yaffs/lib]#mkdir fonts
将pc 端$QTEDIR/lib/fonts 下的所有文件复制到开发板/mnt/yaffs/lib/fonts 下。
cd /host
./progressbar -qws
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐