1、创建目录
在这开始之前,我们先创建一个 qtopia2_apps 目录,用于专门存放我们自已编写的 qtopia2.2.0 程序, 在 Linux 终端中键入以下命令创建该目录:
[root@localhost ~]# mkdir -p /opt/qtopia2_apps
然后在 qtopia2_apps 目录下创建 hello 作为本示例的项目目录,在终端上输入如下命令:
[root@localhost ~]# cd /opt/qtopia2_apps
[root@localhost ~]# mkdir hello
2、使用 designer 工具设计图形界面
2.1 主界面的设计
利用designer 工具来设计hello 程序的主界面,主界面将保存成名为 main_form_base.ui 的 ui 文件,输入如下命令:
[root@localhost ~]# cd hello
[root@localhost~]#/opt/FriendlyARM/tiny4412/linux/x86-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/designer main_form_base.ui
在弹出的 New Form 界面中,选择“Widget”然后点击”OK“,我们将创建一个基于 QWidget 的窗体。接下来我们修改窗口的属性值,将name设置为TMainFormBase,width变为300,height设置为200,caption设置为My Hello.
2.2 在窗体上放置控件
修改完窗口的属性值后,接下来我们就要在窗口上放置控件了,往窗口上放置控件的方法是:在工具栏上点击要放置的控件,再在窗口空白处点击一下即可。
主要放置三个控件:一个文本标签,两个按钮标签,各控件属性的设置如下图所示。
2.3 为按钮添加点击事件的处理
我们首先需要新建两个 slot 函数,一个用于处理OK按钮的点击事件,一个用于处理 Exit 按钮的点击事件,新建 slot 的步骤如下(只将重要步骤的截图放在下面):
1)点击”Edit”菜单,选择“Slots”,将弹出slot 编辑对话框。
2)在上面的对话框中,点击New Slot按钮,然后在 Slot 编辑框中输入“exitButtonClicked()”。
3)然后再点”New Slot“按钮,并在 Slot 编辑框中输入“okButtonClicked()”, 最后 点击 OK 保存并退出该对话框。
4)其次,将 slot 函数与按钮的点击事件对应起来: 单击工具栏上的 Connect Signal/Slots 图标 ,然后参照下图所示进行操作,在“Ok”按钮上按下鼠标左键不放然后拖动到窗口的空白处放开鼠标,操作完成后将会弹出 Edit Connects 对话框。
5)在弹出的 Edit Connects 对话框中,将 clicked()事件连接到 calcButtonClicked() slot 函数,操作方法如下图所示:
6)下面用同样的方法操作 Close 按钮,最后可以得到完整的UI界面。
3、利用C++编写代码
现在开始为hello 编写代码,需要创建三个源代码文件,一个是头文件 main_form.h,一个是源代码文件 main_form.cpp,一个是 main.cpp。
首先在终端输入:
[root@localhost ~]# vi main.cpp
写入如下代码:
#include "main_form.h"
#include <qtopia/qpeapplication.h>
QTOPIA_ADD_APPLICATION("hello”,TMainForm)
QTOPIA_MAIN
接着输入:
[root@localhost ~]# vi main_form.h
在其中写入如下代码:
#ifndef __MAIN_FORM_H__
#define __MAIN_FORM_H__
#include "main_form_base.h"
#include <qsocketnotifier.h>
class TMainForm: public TMainFormBase
{
Q_OBJECT
public:
TMainForm(QWidget * parent = 0, const char * name = 0, WFlags f = WType_TopLevel) :
TMainFormBase(parent,name,f) {}
virtual ~TMainForm() {}
public slots:
void okButtonClicked();
void exitButtonClicked();
};
#endif
然后用 vi 编辑器创建并打开 main_form.cpp 文件
[root@localhost ~]# vi main_form.cpp
写入如下代码:
#include "main_form.h"
#include <qlineedit.h>
void TMainForm::exitButtonClicked()
{
close();
}
void TMainForm::okButtonClicked()
{
}
最后,编写项目文件 hello.pro
[root@localhost ~]# vi hello.pro
CONFIG += qtopiaapp
CONFIG-= buildQuicklaunch
HEADERS= main_form.h
SOURCES= main_form.cpp main.cpp
INTERFACES= main_form_base.ui
TARGET= hello
4、在 PC 上编译并运行示例
首先,编写一个脚本 buildhost.sh 来执行PC 版本的编译工作
在终端输入如下命令:
[root@localhost ~]#cd /opt/qtopia2_apps/hello
[root@localhost ~]# vi buildhost.sh
在 vi 编辑器中输入如下内容:
#!/bin/sh
source /opt/FriendlyARM/tiny4412/linux/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
qmake -o Makefile.host -spec qws/linux-generic-g++ *.pro
make -f Makefile.host clean
make -f Makefile.host
执行以下命令可以实现编译脚本:
[root@localhost ~]# chmod +x buildhost.sh
[root@localhost ~]# ./buildhost.sh
编译完成后,在 hello 下生成了hello 可执行文件,输入如下命令可以在模拟器上运行.(必须已经安装了x86-qtopia)
# cd /opt/FriendlyARM/tiny4412/linux/x86-qtopia
# ./run&
接着输入如下命令:
cd /opt/qtopia2_apps/hello
export QTDIR=/opt/FriendlyARM/tiny4412/linux/x86-qtopia/qtopia-2.2.0-FriendlyARM
/qtopia/image/opt/Qtopia/
export QPEDIR=/opt/FriendlyARM/tiny4412/linux/x86-qtopia/qtopia-2.2.0-FriendlyARM
/qtopia/image/opt/Qtopia/
export HOME=$QPEDIR/root/
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBARAY_PATH
最后执行:
./hello
程序在 PC 上的运行结果如下所示:
5、交叉编译示例程序并在tiny4412上运行
首先,编写一个脚本 buildarm.sh 来执行ARM 版本的编译工作
在终端输入如下命令:
[root@localhost ~]#cd /opt/qtopia2_apps/hello
[root@localhost ~]# vi buildarm.sh
在 vi 编辑器中输入如下内容:
#!/bin/sh
source /opt/FriendlyARM/tiny4412/linux/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
qmake -spec qws/linux-arm-g++ -o Makefile.target *.pro
make -f Makefile.target clean
make -f Makefile.target
执行以下命令可以实现编译脚本:
[root@localhost ~]# chmod +x buildarm.sh
[root@localhost ~]# ./buildarm.sh
编译完成后,在hello下生成了hello可执行文件,将它拷贝到SD卡,然后将SD插到tiny4412开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的 /opt/Qtopia/bin/ 目录下:
# cp /sdcard/hello /opt/Qtopia/bin/
先通过串口终端的命令行来运行,在串口终端上输入以下命令:
# cp /bin/qtopia /bin/run_myhello
# vi /bin/run_myhello
在 vi 编辑器中,改变下面一行的内容:
exec $QPEDIR/bin/qpe
更改成:
exec $QPEDIR/bin/hello
接着在终端输入:
# run_hello&
可以看到Arm上显示如下内容:
6、在 Qtopia 上添加 hello 程序图标
Fedore9 系统中找一个现成的图标来作来 hello 的图标,我使用 /usr/share/icons/hicolor/48x48/apps/ 目录下的 gnome.png 文件作为 hello 的图标,把它拷贝到我们的项目目录并改名为 hello.png, 执行以下命令将该图标复制到hello的项目文件夹里来,在终端输入如下命令:
[root@localhost ~]# cd /usr/share/icons/hicolor/48x48/apps/
[root@localhost ~]# cp gnome-sudoku.png /opt/qtopia2_apps/hello/hello.png
接着写入:
# cd /opt/qtopia2_apps/hello/
# vi hello.desktop
在 vi 中输入以下内容并保存:
[Translation]
File=QtopiaSettings
Context=hello
Comment[Desktop Entry/Name]=Use soft hyphen (char U00AD) to indicate
hyphenation
[Desktop Entry]
Exec=hello
Icon=hello
Type=Application
Name[]=My Hello
CanFastload=0
最后把 hello.png 和hello.desktop 这两个文件放入SD卡,然后将SD卡插到 tiny4412开发板上,在串口终端上执下以下命令,把这两个文件拷贝到Qtopia目录的相应位置:
# cp /sdcard/hello.desktop /opt/Qtopia/apps/Applications/
# cp /sdcard/hello.png /opt/Qtopia/pics
完成后重启开发板,应该可以看到应用程序图标了
7、附件(主要含有源代码等)。经过测试已经完全通过。