注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[QT笔记]QT4环境搭建  

2011-06-23 08:37:51|  分类: QT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

参考TQ6410_QT4.7移植手册.pdf和Mini6410_QT

将软件包准备好

qt-embedded-linux-opensource-src-4.4.0.tar.bz2、tslib-1.4.tar.bz2、qt-x11-opensource-src-4.4.0.tar.gz

       下载地址:ftp://ftp.qtsoftware.com/qt/source/

       帮助文档:http://doc.trolltech.com/4.5/index.html

      

1. 编译QT-X11环境

#tar xvf qt-x11-opensource-src-4.4.0.tar.gz

#cd qt-x11-opensource-src-4.4.0

#./configure  <---------同./configure -prefix /usr/local/Trolltech/Qt-x11-4.4.0,To reconfigure, run 'make confclean' and 'configure'.

选择yes

#make

(1)

错误:X11/Xlib.h:没有那个文件或目录

错误:X11/Xutil.h:没有那个文件或目录

错误:X11/Xos.h:没有那个文件或目录

错误:X11/Xatom.h:没有那个文件或目录

错误:X11/keysym.h:没有那个文件或目录

修正的方法:

#sudo apt-get install libx11-dev<----------------不过最好是安装xorg-dev这个软件包,安装的时候libx11-dev会自动装上的。

(2)

错误: X11/xpm.h:没有该文件或目录

修正的方法:

$ sudo apt-get install libxpm-dev

(3)

/usr/bin/ld: cannot find -lXext

make[1]: *** [../../lib/libQtGui.so.4.4.0] 错误 1

修正的方法:

#apt-get install libxext-dev

       gcc的版本问题,可以看http://doc.trolltech.com/4.4/supported-platforms.html的版本要求。

(4)

{standard input}: Assembler messages:

{standard input}:117444: Fatal error: can't write .obj/release-shared/qstyleditemdelegate.o: No space left on device

{standard input}:117444: Fatal error: can't close .obj/release-shared/qstyleditemdelegate.o: No space left on device

gmake[1]: *** [.obj/release-shared/qstyleditemdelegate.o] Error 1

gmake[1]: Leaving directory `/home/qt4/QT4X11/qt-x11-opensource-src-4.4.0/src/gui'

gmake: *** [sub-gui-make_default-ordered] Error 2

修正的方法:

       磁盘空间不够,清除磁盘里多余东西。

#make install

 

2. 测试QT-X11环境

       进入QT安装目录:

#cd /usr/local/Trolltech/Qt-4.4.0

#vi vi qt_x86.sh

       添加如下内容:

#! /bin/bash

#qt/x11 path

export QTDIR=/usr/local/Trolltech/Qt-4.4.0

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QTDIR/bin:$PATH

 

#source X86linux.sh

#qmake -v

QMake version 2.01a

Using Qt version 4.4.0 in /usr/local/Trolltech/Qt-4.4.0/lib

 

       测试下面的程序:

#include <QApplication>

#include <QPushButton>

 

int main(int argc, char **argv)

{

        QApplication a(argc, argv);

        QPushButton hello("Hello,world!", 0);

        hello.resize(120, 30);

        hello.show();

        return a.exec();

}

#qmake -project

#qmake

#make

#./QTtest

 

3. 编译tslib1.4触摸屏库

       可从https://github.com/kergoth/tslib上下载

#cd /home/qt4/QTE4arm/

#tar xvf tslib-1.4.tar.bz2

#cd tslib-1.4.tar.bz2

#vi build.sh

#/bin/sh

export CC=arm-linux-gcc

./autogen.sh

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

./configure --host=arm-linux --cache-file=arm-linux.cache -prefix=/usr/local/tslib1.4-install \

--with-gnu-ld

       选项解释:

--with-gnu-ld           assume the C compiler uses GNU ld [default=no]

make

#./build.sh

#make install

       将库文件打包,并放到ARM的/usr/local/目录下:

#tar cvf tslib1.4-install.tar.bz2 tslib1.4-install

 

4.  编译QT/E库

#tar xvf qt-embedded-linux-opensource-src-4.4.0.tar.bz2

#cd qt-embedded-linux-opensource-src-4.4.0/

#./configure -embedded arm -xplatform qws/linux-arm-g++ \

-depths 16 -little-endian -qt-mouse-tslib -release -silent \

-shared -qt-libpng -qt-libjpeg -qt-libmng -qt-libtiff \

-make libs -nomake tools -make examples \

-nomake docs -make demos -qt-freetype -qt-gfx-linuxfb \

-no-gfx-transformed -no-gfx-transformed -no-gfx-multiscreen \

-no-gfx-vnc -no-gfx-qvfb -no-qt3support -no-nis -no-cups \

-no-iconv -no-dbus -no-openssl \

-no-fast -no-accessibility -no-mmx -svg -no-webkit \

-no-3dnow -no-sse -no-sse2  -no-glib \

-I/usr/local/tslib1.4-install/include \

-L/usr/local/tslib1.4-install/lib \

-prefix /usr/local/Trolltech/qt-embedded-4.4.0

       选项解释如下:

在help里面,加*号的选项通常是默认安装的,加+号的选项则需要预先评估,评估成功后才可安装。

-embedded <arch> .... This will enable the embedded build, you must have a proper license for this switch to work. Example values for <arch>: arm mips x86 generic

-xplatform target ... The target platform when cross-compiling.

-depths <list> ...... Comma-separated list of supported bit-per-pixel depths, from: 1, 4, 8, 12, 15, 16, 18, 24, 32 and 'all'.

-little-endian ...... Target platform is little endian (LSB first).

-qt-mouse-<driver> ... Enable a mouse <driver> in the QtGui library. Possible values for <driver>: [ pc bus linuxtp yopy vr41xx tslib qvfb ]

-release ........... Compile and link Qt with debugging turned off.

-silent ............ Reduce the build output so that warnings and errors can be seen more easily.

-qt-libpng ......... Use the libpng bundled with Qt.

-qt-libjpeg ........ Use the libjpeg bundled with Qt.

-qt-libmng ......... Use the libmng bundled with Qt.

-qt-libtiff ........ Use the libtiff bundled with Qt.

-make <part> ....... Add part to the list of parts to be built at make time.

-nomake <part> ..... Exclude part from the list of parts to be built.

-qt-kbd-<driver> ... Enable a keyboard <driver> in the QtGui library. Possible values for <driver>: [ tty usb sl5000 yopy vr41xx qvfb ]

-qt-freetype ........ Use the libfreetype bundled with Qt.

-qt-gfx-<driver> ... Enable a graphics <driver> in the QtGui library. Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]

-no-gfx-<driver> ... Disable graphics <driver> entirely. Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]

-no-qt3support ..... Disables the Qt 3 support functionality.

-no-nis ............ Do not compile NIS support.

-no-cups ........... Do not compile CUPS support.

-no-iconv .......... Do not compile support for iconv(3).

-no-dbus ........... Do not compile the QtDBus module.

-no-openssl ........ Do not compile support for OpenSSL.

-no-fast ........... Configure Qt normally by generating Makefiles for all project files.

-no-accessibility .. Do not compile Accessibility support.

-no-mmx ............ Do not compile with use of MMX instructions.

-svg ............... Build the SVG module.(可缩放的矢量图形)

-no-webkit ......... Do not build the WebKit module.

-no-3dnow .......... Do not compile with use of 3DNOW instructions.

-no-sse ............ Do not compile with use of SSE instructions.

-no-sse2 ........... Do not compile with use of SSE2 instructions.

-no-glib ........... Do not compile Glib support.

 

#make

#make install

       其中qws/linux-arm-g++定义交叉工具类型。-prefix 选项要特殊注意,该指定目录必须要与实际NFS目录对应否则字体处会出现错误。在/usr/local/Trolltech/qt-embedded-4.4.0中会安装文件,其中lib和plugins文件夹是我们需要的。

 

在编译ARM版QT应用程序前建立环境变量,将其生成脚本,方便以后的操作:

#vi qt_arm.sh

#!/bin/bash

export QTDIR=/usr/local/Trolltech/qt-embedded-4.4.0

export PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH=$QTDIR/lib

#source qt_arm.sh

#qmake -v

QMake version 2.01a

Using Qt version 4.4.0 in /usr/local/Trolltech/qt-embedded-4.4.0/lib

#qmake -project

#qmake

#make

 

5. 拷贝需要的文件

5.1 利用tslib生成文件

       将tslib_install/lib/下的文件拷贝到根文件系统的lib/下面:

#cp -rf /usr/local/tslib1.4-install/lib/* /home/kernel/rootfs/rootfs/lib/

       利用tslib提供的触摸屏校准程序ts_calibrate:

#cp -rf /usr/local/tslib1.4-install/bin/ts_calibrate /home/kernel/rootfs/rootfs/bin/

 

5.2 利用qt-4.4.0生成文件

       我们仅利用它生成的lib和plugins文件。

       在文件系统中创建文件夹/opt/qt-4.4.0,用于存放qt-4.4.0的生成文件。

#pwd   <---------------当前文件系统根目录

/home/kernel/rootfs/rootfs

#mkdir -vp opt/qt-4.4.0

       将/usr/local/Trolltech/qt-embedded-4.4.0中的lib和plugins文件夹拷贝到刚才新建的目录中去:

#cp -rf /usr/local/Trolltech/qt-embedded-4.4.0/lib /home/kernel/rootfs/rootfs/opt/qt-4.4.0/

#cp -rf /usr/local/Trolltech/qt-embedded-4.4.0/plugins /home/kernel/rootfs/rootfs/opt/qt-4.4.0/

       创建一个创建一个opt/qt-4.4.0/bin目录用于存放自己的qt程序,并将测试程序拷贝进去:

#mkdir -pv opt/qt-4.4.0/bin

 

5.3安装文泉驿中文正黑字库

       将中文字库文件拷贝到文件系统:

#cp wqy-zenhei.ttc opt/qt-4.4.0/lib/fonts/

 

5.4 设置ARM环境变量

       在ARM端将其添加到/etc/profile下:

export QTDIR=/opt/qt-4.4.0

export LD_LIBRARY_PATH=$QTDIR/lib

export TSLIB_TSDEVICE=/dev/event0            #<----------触摸屏设备节点

export TSLIB_PLUGINDIR=/lib/ts            #<----------触摸屏在进行AD转换时用到的插件

export TSLIB_CALIBFILE=/etc/pointercal            #<----------生成的校验文件存放目录,可以先放在其它能写的目录,再放回来。

export TSLIB_FBDEVICE=/dev/fb0            #<----------触摸屏framebuff设备节点

export TSLIB_CONSOLEDEVICE=none

export TSLIB_CONFFILE=/etc/ts.conf            #<----------触摸屏配置文件

export QWS_MOUSE_PROTO="tslib:/dev/event0"

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"            #<----------如果不加这条会出现触摸屏字体很小的现象

export QT_QWS_FONTDIR=$QTDIR/lib/fonts            #<----------设置字体

export QT_PLUGIN_PATH=$QTDIR/plugins/

export LANG=zh_CN

#export LANG=en_US

      

       将ts.conf拷贝到ARM文件系统的/etc下,并将其内容改为:

#cp /usr/local/tslib1.4-install/etc/ts.conf /home/kernel/rootfs/rootfs/etc/

module_raw input

module pthres pmin=1

module variance delta=30

module dejitter delta=100

module linear

 

6. 编写QT-X11程序

       建立实验目录:

#/mnt/test/testqt-x11

       使用designer编辑程序控件:

#/usr/local/Trolltech/Qt-4.4.0/bin/designer

       选择一个窗口布局Widget 点击->创建

       拖拽几个简单的控件(TextEdit、PushBotton、TextLabel)进行界面设计

       初始化控件及相关属性内容

       建立信号与槽的连接

       show按钮与文本编辑框的连接clicked->clear

       第二组信号与槽的连接

       exit按钮与Form的连接clicked->closed

       退出界面编辑保存为UI格式 testx11.ui

编辑main.cpp函数

#vi main.cpp

#include "ui_testqt.h"

int main(int argc, char *argv[])

{

        QApplication app(argc, argv);

        QWidget *widget = new QWidget;

        Ui::Form ui;

        ui.setupUi(widget);

        widget->show();

        return app.exec();

}

#/usr/local/Trolltech/Qt-4.4.0/bin/qmake -project       <--------可修改.pro文件中的target来指定运行程序的名字,否则与目录相同。

#/usr/local/Trolltech/Qt-4.4.0/bin/qmake

#./QTtest -qws

 

7. QT编程扩展

编写自定义的信号与槽

       编辑自己定义槽函数的头文件myqt.h。包含ui_testx11.h头文件,继承其控件类,定义自定义函数文件处理函数MyDlg(),并添加自定义函数槽ShowInfo()即可。

#vi myqt.h

#ifndef __DLG_H__

#define __DLG_H__

 #include <QDialog>

#include <ui_testx11.h>

 class MyDlg : public QDialog

{

       Q_OBJECT

       public:

       MyDlg();

public slots:

       void ShowInfo();

private:

       Ui::Form ui;

};

#endif

       编辑myqt.cpp文件进行函数功能实现

其中ShowInfo()函数槽中定义改变textEdit的内容为“Welcome to QT-world”

#vi myqt.cpp

#include "myqt.h"

MyDlg::MyDlg()

{

        ui.setupUi(this);

        QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(ShowInfo()));

        QObject::connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(close()));

}

void MyDlg::ShowInfo()

{

       ui.textEdit->setHtml(QApplication::translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"

       "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"

       "p, li { white-space: pre-wrap; }\n"

       "</style></head><body style=\" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;\">\n"

       "<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt; font-weight:600; color:#55aaff;\">Welcome to QT-world</span></p></body></html>", 0, QApplication::UnicodeUTF8));

}

       重新编辑main.cpp函数,包含自定义头文件并使用自定义的类对象进行QT实现

# vi main.cpp

#include <QApplication>

#include "myqt.h"

int main(int argc, char **argv)

{

        QApplication app(argc, argv);

        MyDlg *mydlg = new MyDlg;

        return mydlg->exec();

}


  评论这张
 
阅读(1638)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018