Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281122
  • 博文数量: 53
  • 博客积分: 1293
  • 博客等级: 中尉
  • 技术积分: 506
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-20 22:14
文章分类
文章存档

2014年(1)

2012年(5)

2011年(47)

分类: LINUX

2011-05-23 20:28:12

            在qtopia中添加应用_x86-qtopia(基于mini2440-Friendly)

环境:
Fedora9
vmware6.5
gcc-4.3.x
g++-4.3.x
qtopia-2.2.0

安装:
参考友善的mini2440用户手册,分别安装x86平台和arm平台的qtopia-2.2.0。
友善在/opt/FriendlyARM/mini2440/这个目录下,产生了两个子目录,分别是x86-qtopia和arm-qtopia.

在x86平台的qtopia中添加应用
一、详细理解x86-qtopia中的例程hello
1、build
#!/bin/bash
source /opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
qmake -o Makefile -spec /opt/FriendlyARM/mini2440/x86-qtopia/qtopia-2.2.0- FriendlyARM/qtopia/mkspecs/qws/linux-generic-g++ *.pro
make clean
make
第一行     告诉内核正在运行的是一个bash脚本
第二行     设置环境变量(具体可见setQpeEnv这个文件)
第三-四行  根据工程文件*.pro,产生Makefile
第五行     如果之前曾make过,则删除旧的目标文件
第六行     重新make
(注意make后生成的目标文件在x86-qtopia/qtopia-2.2.0- FriendlyARM/qtopia/bin/,在Makefile里指定了)

2、run-hello
#!/bin/sh
../qtopia-2.2.0-FriendlyARM/qt2/bin/qvfb -width 240 -height 320 -depth 16 &
#export CAMERA_DEVICE=/dev/video1
#qtopia-2.2.0-FrinedlyARM/qt2/bin/qvfb -width 640 -height 480 -depth 16 &
cd ../qtopia-2.2.0-FriendlyARM/qtopia/image
mkdir root 2>/dev/null || true
export HOME=$PWD/root
cd opt/Qtopia
export PATH=$PWD/bin:$PATH
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBARAY_PATH
export QTDIR=$PWD
export QPEDIR=$PWD
export KDEDIR=$PWD/../kde
sleep 3
../../../bin/hello -qws
第一行        告诉内核正在运行的是一个shell脚本
第二行        设置模拟器qtopia的大小240×320
第三-四行    注释(可删除)
第五行        进入image文件夹
第六-七行    ......(暂时不知道功能)
第八行        进入Qtopia文件夹
第九-十三行 设置环境变量
第十四行      睡眠3秒(至于为什么,暂时不知道)
第十五行      用模拟器打开hello程序

三、在qtopia中添加自己编写的应用程序
步骤与“将hello例程添加到qtopia应用中”的步骤一样,但是这个应用程序是我们自己编写,因此必须要通过编译。
因此这里主要将如何编写我们的应用程序,及如何编译。这里根据我的一个简单程序讲解
这里我假设你已经会通过编写qt程序设计qt界面,而不是通过designer设计qt界面
1、在x86-qtopia下建一个文件夹,取名counter
2、唯一与qt开发有点区别的是main.cpp文件!当然要注意在程序编写过程中由于qt版本的不同,有些类的参数可能不
    一样,甚至有些类是不能用的。以下为源程序(不做讲解)。
*.h和*.cpp文件:
counter.h:
  1. #ifndef COUNTER_H
  2. #define COUNTER_H

  3. #include <qlabel.h>
  4. #include <qwidget.h>
  5. #include <qpushbutton.h>
  6. #include <qlayout.h>

  7. class Counter : public QWidget
  8. {
  9.  Q_OBJECT

  10. public:
  11.  Counter(QWidget *parent=0 , const char *name=0, WFlags f=0);
  12.  ~Counter();
  13.  QPushButton *AddButton;
  14.  QPushButton *SubButton;

  15. public slots:
  16.  void IncCounter();
  17.  void DecCounter();

  18. private:
  19.  int counter;
  20.  QVBoxLayout *counterVBoxLayout;
  21.  QLabel *CounterLabel;
  22. };

  23. #endif
counter.cpp:
  1. #include "counter.h"

  2. Counter::Counter(QWidget *parent, const char *name, WFlags f) : QWidget(parent, name, f)
  3. {
  4.  counter = 0;

  5.  AddButton = new QPushButton("Add", this);
  6.  SubButton = new QPushButton("Sub", this);
  7.  CounterLabel = new QLabel(tr("0"), this);
  8.  CounterLabel->setAlignment(Qt::AlignCenter);

  9.  counterVBoxLayout = new QVBoxLayout(this);
  10.  counterVBoxLayout->addWidget(AddButton);
  11.  counterVBoxLayout->addWidget(SubButton);
  12.  counterVBoxLayout->addWidget(CounterLabel);

  13.  QObject::connect(AddButton, SIGNAL(clicked()), this, SLOT(IncCounter()));
  14.  QObject::connect(SubButton, SIGNAL(clicked()), this, SLOT(DecCounter()));
  15. }

  16. Counter::~Counter()
  17. {
  18. }

  19. void Counter ::IncCounter()
  20. {
  21.  CounterLabel->setNum(++counter);
  22. }

  23. void Counter ::DecCounter()
  24. {
  25.  CounterLabel->setNum(--counter);
  26. }

main.cpp:
  1. #include "counter.h"
  2. #include <qtopia/qpeapplication.h>
  3. QTOPIA_ADD_APPLICATION("counter",Counter)
  4. QTOPIA_MAIN
//main.cpp 是一个通用的模板,只需要修改第一行和第三行。
 
3、拷贝:
   将例程hello下build,run-hello,hello.pro,hello.desktop文件拷贝过来。
   修改名字为:run-counter,counter.pro,counter.desktop
4、修改run-counter
   最后一句../../../bin/hello -qws,将hello修改为counter
5、修改counter.desktop
   Exec=hello       //可执行文件的名字 <-修改
   Icon=Hello       //图标名   <-修改
   Type=Application //类型为应用程序
   Name=Hello2440   //在界面生显示的名字 <-修改
3、修改counter.pro
CONFIG  += qtopiaapp   //添加这一行这样编出来是quicklaunch插件程序(applications目录下的程序默
                       //认config是quichlaunch, 别的目录不是哦)
CONFIG  -= buildQuicklaunch  //要想编成独立的应用, 加上这句
DESTDIR = $(QPEDIR)/bin
HEADERS = hello.h      //头文件 <-修改
SOURCES = hello.cpp    //源程序 <-修改
SOURCES+=main.cpp
INTERFACES = hello_base.ui   //用designer生成的,这里没用到  <-删除
TARGET  = hello        //目标名  <-删除
(注意:没用designer设计界面,则这句必须删除INTERFACES = hello_base.ui)
4、其他的与“将hello例程添加到qtopia应用中”的步骤一样

二、将hello例程添加到qtopia应用中(即在x86-qtopia下运行./run出现的qtopia模拟器)
1、理解hello.desktop
 [Desktop Entry]
Comment=An Example Program   //说明而已,没什么用
Exec=hello      //可执行文件的名字
Icon=Hello      //图标名
Type=Application  //类型为应用程序
Name=Hello2440  //在界面生显示的名字
 
2、将hello.desktop复制到
    x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/image/opt/Qtopia/apps /Applications/
 
3、找一个图标,最好压缩下(我压缩成64×64左右),图标改成png格式,取名Hello。最好在工程文件夹 
(即x86-qtopia/hello)下建一个与工程名同名的文件夹(这里为hello)。将该图标复制到该文件夹下。 
  再将该文件夹复制到x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/image/opt/Qtopia/pics/
 
4、将x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/bin/文件夹下的hello可执行文件复制到
    x86-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/image/opt/Qtopia/bin/
 
5、重新在x86-qtopia下运行./run,你将能看到添加的名字为Hello2440的应用,点击能运行。
阅读(2461) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~