从Qt移植到项目部分问题总结(图片,视频播放)

QT从移植到项目总结:

1、2.6内核移植及QTE安装:

1.1其中提示下面信息:Make sure that you are logged in to the guest operating system.Mount the virtual CD drive in the guest,launch a Terminal,and use tar or rpm to uncompress the installer.Then,execute vmware-install.pl to install VMware Tools.首先确认你已经登录了客户端的系统在客户端机器上启用虚拟光驱启动terminal,用tar或者rpm把安装文件解压,执行安装-----表示:VMTools无法安装、分辨率很少、虚拟机的共享文件夹不能用:只需要找到linux.iso,用安装光驱的方法,则可以安装vmtools,这样后边的两个连带问题就相应解决了。

1.2少几个lib库:

可能会缺少3个库文件,使用命令:find / -name xxx.so.x 查找,找到后复制到

/home/tslib1.4/lib中

# cp librt.so.1 /home/arm-qt/lib/

# cp libstdc++.so.6 /home/ arm-qt /lib/

# cp libgcc_s.so.1 /home/ arm-qt /lib/

1.3做QT小项目整个交叉编译流程:

QT Creater下测试通过,在linux下重新编译qmake -project、 qmake、 make,然后在开发板中运行。先进入/tmp/arm-qt下进行环境变量的设置,然后运行./hello –qws.

1.4./configure参数理解:

#./configure -release -static -fast -no-largefile -no-exceptions -no-sql-sqlite -no-qt3support -qt-zlib -no-libtiff -qt-libpng -no-libmng -qt-libjpeg -make libs -nomake examples -nomake demos -nomake docs -no-cups -iconv -xplatform qws/linux-arm-g++ -embedded arm -little-endian

-qt-freetype -depths 8,16,24,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-qvfb -no-multimedia -no-phonon -no-phonon-backend -no-audio-backend -no-openssl -no-gfx-vnc -no-gfx-multiscreen -no-script -no-webkit -no-scripttools -no-dbus -qt-kbd-qvfb -qt-kbd-tty -no-glib -no-svg -no-mmx -no-3dnow -no-sse -no-sse2 -no-gif -qt-mouse-tslib -I/home/tslib1.4/include

-L/home/tslib1.4/lib -D__ARM_ARCH_5TEJ__

-qt-mouse-tslib -I/home/tslib1.4/include -L/home/tslib1.4/lib 是说用的是tslib,后面的-I ,-L 分别指明了要包含的头文件和库文件, home/tslib1.4/是编译tslib-1.4是生成文件的目录。

-D__ARM_ARCH_5TEJ__ 是出现了后面的错误 #error "Not supported ARM architecture" 后又重新回来加上的,加上后指明了适合的平台就没这个错误了。

在编译Qt库之前,需要其它库的支持,比如jpeg,zlib,png,根据软件及系统的不同,进行加载,系统带了就不需要自己安装,编译的时候 –qt-xxxx,表示编译该库,-no-xxxx,表示不编译,按照默认安装的话,生成的Qt库有1G到2G大小,太大了占空间,而且需要编译的时间很长,所以我们要对QT库进行裁剪,只编译我们要用的库。

下面这个网站是对configure参数的详细解释

该配置信息在博创2410,PXA-270,飞凌2440上测试成功,2G内存可在一个小时内编译完成。

1.5环境变量设置的理解:

tslib 1.4的配置

tslib的config信息首先从系统的环境变量读取,从环境变量读取的参数有下面一些 TSLIB_TSEVENTTYPE

虽然很多文档提到了这个参数,但我在tslib 1.4的源代码里面没有找到这个参数,这个参数应该已经没有什么用了

TSLIB_CONSOLEDEVICE

控制台设备文件名

TSLIB_FBDEVICE

framebuffer的文件名

TSLIB_TSDEVICE

触屏的文件名

TSLIB_CALIBFILE

触屏校正信息保存文件

TSLIB_CONFFILE

tslib配置文件

TSLIB_PLUGINDIR

tslib需要加载模块所在的目录

我们可以使用下面的指令设置以上参数

export QTDIR=$PWD

export LD_LIBRARY_PATH=$QTDIR/lib:/lib //指定QT库的路径

export TSLIB_TSDEVICE=/dev/event0 //触屏的文件名

export TSLIB_PLUGINDIR=$PWD/lib/ts // tslib需要加载模块所在的目录 export TSLIB_CONSOLEDEVICE=none //控制台设备文件名

export QT_TSLIBDIR=$PWD/lib //指定tslib库的路径

export TSLIB_CONFFILE=$PWD/etc/ts.conf // tslib配置文件

export POINTERCAL_FILE=$PWD/etc/ts-calib.conf //tslib指针文件

export QWS_MOUSE_PROTO=tslib:/dev/event0 //tslib设备文件名

export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf //触屏校正信息保存文件

export QT_QWS_FONTDIR=$PWD/lib/fonts //指定字体

./ts_calibrate //板子上陆续出现5个光标,点击完毕后会生成校准文件pintercal存放在本目录/etc/下

ts_calibrate 是一个应用程序,在屏幕上画几个十字,将用户点击后从触摸屏驱动获得的数据和屏上的坐标通过一套算法来获得校准数据写入到校准文件当中。

再继续测试

./ts_test //这时LCD上出现光标,要是前面操作都是正确的话,光标应该指哪打哪的,点在哪个地方,光标就出现在哪个地方。要是点了之后,光标没有任何的动作,那么要仔细查看ts.conf的配置文件了。

1.6 linux2.6内核与linux2.4内核挂载命令不同,否则会出现能够挂在上,但是不能共享文件或QT程序不能运行:

如果文件不能共享,vmwaretools 未安装成功,挂载命令可以试一下:

#mount –t nfs –o tcp,nolock 192.168.1.*:/home /tmp

#mount –t nfs –o nolock wsize=1024,rsize=1024 192.168.1.*/home /tmp

1.7桥接与nat区别:

桥接:板子与虚拟机连接方式

Nat:虚拟机上网连接方式

2、 电子相册:

工程名:

类名:

实现功能:

使用到的类枚举:

项目特色:

2.2功能函数:

2.2.1打开文件:

函数名:

思想:用QStringList对象s存放打开的文件,然后用QStringList::interator迭代器对象处理list,使所有打开文件保存在空字符串数组中,然后用QPixmap对象对其进行下载,在label中显示。

关键代码如下:

s = QFileDialog::getOpenFileNames(this, ("open"),("/"),tr("*.png *.jpg")); for(it=s.begin();it<s.end();it++)

{

n1[k++]=*it;

}

pix.load(n1[0]);

label->setPixmap(pix);

2.2.2 大图片完整浏览

若将label直接拖放在ui中的ScrollArea中,在编辑代码

Ui->ScrollArea->setWidget(label);时会报错,因为当用ui将label放到ScrollArea中时,已经默认其父窗体为Widget。这里label的父窗口需为ScrollArea才能浏览大图。

函数名:

思路:

关键代码:

2.2.3 自动播放图片:

1.QTimer的使用;

一、头文件中添加声明和创建函数:

例:private:

QTimer *timer;

private slots:

void action();

二、Widget函数中声明并添加算法:

Timer = new QTimer;

Connect(timer,SIGNAL(timeout()),this,SLOT(action()));

算法:void Widget::action()

{

//算法;

}

三、在触发部件函数中编写timer->start(延时(ms))或

timer->stop();

Timer一旦开始运行,则默认是一个独立线程,总之,只有将其timer->stop(),它才会停止,否则会影响图片放大缩小,前进后退等操作。所以每个函数中都必须有此举代码。

函数名:

思路:

关键代码:

2.3界面美化:

2.3.1添加资源文件:

在工程上单击右键-?add New->Qt(Qt Resource file)->选择路径->取名字->生成*.qrc的源文件

将图片放入工程目录下,

继续文件操作:add->add prefix(选择相对路径)->add->add files(选中所要加载的图片)

2.3.2背景图片的添加语句:

QImage image1;

image1.load(":/picture/3.png");

QImage image2 = image1.scaled(320,240);

QPalette palette;

palette.setBrush(w.backgroundRole(),QBrush(image2));

w.setPalette(palette);

2.4国际化:(文权译):下面代码写在main.cpp中创建对象之前。

QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));

QFont font("wenquanyi", 36);

a. setFont(font); //a为QAppplication对象。

2.5 查阅资料,掌握程序中用到的主要的类及类方法

可再补充:

3、Mplayer:

工程名:

类名:

实现功能:

使用到的类枚举:

项目特色:

3.1QProcess 理解:

QProcess 对象process.start(“./mplayer –zoom –x 320 –y 240 daomeixiong.avi”);

在windows下,需注明mplayer.exe和avi文件的路径,如果是mplayer.exe、daomexiong.avi都在该工程的根目录下,不可使用

Process.start(“./mplayer.exe –zoom –x 320 –y 240 ./daomeixiong.avi”);代码,但是用

Process.start(“../工程名/mplayer.exe –zoom –x 320 –y 240 ../工程名/daomeixiong.avi”);则可以。编写时注意各参数前后都有空格。

Start()为启动进程,视频播放完成或更换时需要关闭该进程使用close();

3.2mplayer 相关参数:

在slave模式,是MPlayer为后台运行其他程序。不再截获键盘事件,MPlayer会从标准输入读一个换行符(\n)分隔开的命令.

-slave直接影响暂停功能:

my->write("seek +10\n");//注意数字前面的加号和换行符

my->write("seek -10\n");//快退

my->write("volume +1\n");//音量增加

my->write("volume -1\n");

my->write("mute 1\n");//静音

my->write("mute 0\n");

3.3指定窗口播放:

QString path;

QStringList list;

path=”E:\mplayer.exe”;

list<<”-zoom”;

list<<”-slave”;

list<<”-quiet”;

list<<”-wid”<<QString::number((unsigned int)this->widget->winId());

list<<”-vo”<<”directx::noaccel”;

list<<vdeioList[i];

process.start(path,list);

红色代码为windows下的固定窗口代码,在arm下无效,在虚拟机下编译时要注销掉。

3.4 QFileDialog调用文件打开方法中最后参数的关键作用:

如果写成vedio file()或*.*,则可以选择所有文件。

3.5各功能的实现(同2章)

各函数名、思路及关键代码。

3.6 查阅资料,掌握程序中用到的主要的类及类方法

可再补充:

4.测温项目

5.小结

自己在编程时遇到的问题罗列出来并注明将解决方法。

部分问题:

1)编译Tslib时,没有生成四个文件夹。

解决:可能是build.sh有问题。注意英文短线‘-’,并且./configure 后边的参数是一行命令,没有换行。

2)如果已经校准过触摸屏,并且把缺少的库文件拷到arm-qt/lib中,开机后,设定环境变量后,仍然提示缺少库文件。

解决:将环境变量写入脚本中,或者多设置几次。

3)编写电子相册程序时,有时后图片不显示,或者跳过一两张。

解决:图片没有加载进资源文件中,或者是加载进来了,但没有指定好路径,或者是图片本身不存在,或者是图片是损坏的,不能直接修改图片后缀来改变图片格式。

相关推荐