zoukankan      html  css  js  c++  java
  • Qt开发环境的建立

    开发模式

                   在宿主机Federa上通过qvfb来模拟帧缓冲

                   开发完毕后使用qt-embedded重新编译后下载程序到ARM上运行(ARM上需要安装Qt)

    开发所需软件

    • qtopia-free-1.7.0.tar.gz
    • qt-x11-2.3.2.tar.gz
    • tmake-1.11.tar.gz
    • qt-embedded-2.3.7.tar.gz

    配置时设置qvfb: ./configure -qconfig -qvfb -depths 4,8,16,32

    程序的运行方式: ./qvfb &

                               ./canvas –qws   (一般调试时采用这种方式)

                              注意:QT默认显示窗口大小为240x320像素,指定其他窗口大小:qvfb -width 640 -height 480 &

    如果需要将自己开发的安装在Qtopia中,则需要以下的步骤:

    1. 在/x86-qtopia目录下建立文件夹hello,并编写相应的程序,执行:

    make

    编译完后程序生成在$QPEDIR/bin下

    2. 设置配置文件hello.desktop并复制配置文件到$PEDIR/apps/Applications下:

    配置文件内容:

    [Desktop Entry]

    Comment=An Hello Demo.

    Exec=hello

    Icon=Hello

    Type=Application

    Name=Hello

    执行命令:

    cp hello.desktop $PEDIR/apps/Applications

    3. 执行程序:

    qvfb &

    qpe

    4. 修改图标:

    设计32*32的PNG图片放到<Qtopia>/pics/inline目录下,然后用qembed转换

    qembed -images $QPEIDR/pics/inline/*.* > $QPEIDR/src/librabies/qtopia/inlinepics_p.h

    宿主机Qt的安装

    ***********************************************************************************************

    注:以下安装步骤在Redhat 9系统下测试通过,安装步骤参考了MagicARM2410平台实验手册。

    在/zylinux下建立目录 x86-qtopia 所有的软件包都复制到该目录下

    ***********************************************************************************************

    1.安装tmake

    tar xzvf tmake-1.11.tar.gz

    export TMAKEDIR=/zylinux/x86-qtopia/tmake-1.11

    export TMAKEPATH=/zylinux/x86-qtopia/tmake-1.11/lib/qws/linux-x86-g++

    export PATH=$PATH:/zylinux/x86-qtopia/tmake-1.11/bin/

    Tmake配置文件:Tmake.conf

    Tmake的模板:app.t 用于生成应用程序的Makefile

        lib.t 用于生成库文件的Makefile

        subdirs.t 用于创建编译子目录中程序的Makefile

    2.安装Qt/X11

    tar xzvf qt-x11-2.3.2.tar.gz

    cd qt-2.3.2/

    export QTDIR=$PWD

    export PATH=$QTDIR/bin:$PATH

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    ./configure -static -no-xft -no-opengl

    make

    make -C tools/qvfb

    mv tools/qvfb/qvfb bin

    export QTEDIR=$QTDIR

    cp bin/uic $QTEDIR/bin

    cd ..

    Qt的配置比较复杂 详细查看./configure --help

    make -C tools/designer  图形设计器designer

    3.解压Qtopia

    tar xzvf qtopia-free-1.7.0.tar.gz

    export QPEDIR=$PWD/qtopia

    4.安装Qt/Embeded

    这里使用了QPE的配置文件

    tar xzvf qt-embedded-2.3.7.tar.gz

    cd qt-2.3.7

    export QTDIR=$PWD

    export QTEDIR=$QTDIR

    export PATH=$QTDIR/bin:$PATH

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    cp $QPEDIR/src/qt/qconfig-qpe.h src/tools

    (echo yes; echo yes)|./configure -platform linux-x86-g++ -qconfig qpe -qvfb -depths 4,8,16,32

    make sub-src  //make -C src

    cd ..

    5.安装Qtopia

    cd qtopia-1.7.0

    export QTDIR=$QTEDIR

    export QPEDIR=$PWD

    export PATH=$QTEDIR/bin:$PATH

    cd src

    ./configure -platform linux-x86-g++

    make

    cd ../..

    ***********************************************************************************************

    ***********************************************************************************************

    配置脚本(以上5步的完整安装,所有需要文件放在/zylinux/x86-qtopia下,执行./build):

    #!/bin/bash

    echo remove old dirs

    rm -rf tmake

    rm -rf qt

    rm -rf qt-x11

    rm -rf qtopia

    echo Unpack all packages

    tar xzvf tmake-1.11.tar.gz

    tar xzvf qt-embedded-2.3.7.tar.gz

    tar xzvf qt-x11-2.3.2.tar.gz

    tar xzvf qtopia-free-1.7.0.tar.gz

    echo rename

    mv tmake-1.11 tmake

    mv qtopia-free-1.7.0 qtopia

    mv qt-2.3.7 qt

    echo Start Install Qt-X11

    cd qt-2.3.2

    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 bin/uic $QTEDIR/bin

    cp bin/?* ../qt/bin

    cd ..

    #cp $QTDIR/bin/?* qt/bin

    mv qt-2.3.2 qt-x11

    echo Start Setting env-var

    export QTDIR=$PWD/qt

    export QTEDIR=$QTDIR

    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

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    echo Start build Qt/Embedded

    cd qt

    make clean

    cp $QPEDIR/src/qt/qconfig-qpe.h src/tools

    (echo yes; echo yes)|./configure -platform linux-generic-g++ -qconfig qpe -qvfb -depths 16,24,32

    make -C src

    cd ..

    echo Start Build Qtopia

    cd qtopia/src

    ./configure -platform linux-generic-g++

    make 

    echo OK

    这样安装完后的安置路径为:

    qt-embedded-2.3.7.tar.gz /zylinux/x86-qtopia/qt

    qtopia-free-1.7.0.tar.gz /zylinux/x86-qtopia/qtopia

    qt-x11-2.3.2.tar.gz /zylinux/x86-qtopia/qt-x11

    tmake-1.11.tar.gz /zylinux/x86-qtopia/tmake

    ***********************************************************************************************

    ***********************************************************************************************

    安装完毕,开发前需要导出环境变量:

    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

    ***********************************************************************************************

    ***********************************************************************************************

    注:如果运行时找不到某些库,则需要设置库路径:

    在/etc/ld.so.conf文件中增加Qt库的路径

    /zylinux/x86-qtopia/lib

    /zylinux/x86-qtopia/qtopia/lib

    添加完路径后,在/etc目录下以root身份执行ldconfig使Qt的库生效。

     

    注:undefined reference to vtable for "xxx::xxx"解决方法

    某一个类中如果加入Q_OBJECT后, 则link时提示:undefined reference to vtable for "xxx::xxx".删掉它则没有任何问题.

    解决:因为qmake生成Makefile的时候,这个类的头文件中并没有Q_OBJECT,所以在相应的Makefile里面并没有用moc xxx.h命令,最终导致链接失败.重新运行qmake,问题解决.在查找解决方法的时候,附带发现一点:qmake 不会处理.cpp文件里的Q_OBJECT,所以,如果在.cpp文件中有它的话,也会产生undefined reference to vtable for "xxx::xxx". 这时,需要先用moc xxxx.cpp生成相应的moc文件,再包含到.cpp里面去,才能解决这个问题.

  • 相关阅读:
    【原】CSS实现背景透明,文字不透明,兼容所有浏览器
    【原】我是超级收银员,你敢来挑战吗
    【原】iphone6来了,我该做点什么(兼容iphone6的方法)
    【原】移动web页面兼容处理的思考
    【原】移动web动画设计的一点心得——css3实现跑步
    【原】移动web页面使用字体的思考
    【原】HTML5 新增的结构元素——能用并不代表对了
    更为简单的Ctrl+S自动刷新浏览器工具-LinrF5
    博客3周年
    【原】移动web页面支持弹性滚动的3个方案
  • 原文地址:https://www.cnblogs.com/feisky/p/1598232.html
Copyright © 2011-2022 走看看