请教QT5的移植问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教QT5的移植问题相关的知识,希望对你有一定的参考价值。

参考技术A 一、准备
busybox 1.14.1
qt-embedded-linux-opensource-src-4.5.1
tslib 1.4
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
构建一个新的根文件系统目录,路径为
/root/rootfs

二、具体步骤:

1、编译安装busybox
在最新版。可以参考如下几处要修改的地方:
Busybox Settings ---; Build Options ---; (arm-linux-)Cross Compiler prefix
Busybox Settings ---; Installation Options ---;[]Dont;t use /usr
Busybox Settings ---; Installation Options ---;(/root/rootfs) BusyBox installation prefix
Busybox Settings ---;Busybox Library Tuning ---;[*] Fancy Shell prompts
输入如下命令,编译并安装。
make;make install

2、编译安装tslib
./autogen.sh
./configure -prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes
make;make install

安装目录指明为 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/
主要是为了在编译QTE时,不用指定tslib的头文件和库文件,方便以后程序开发。

注意:在做这一步前,需要做一个目录链接
在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/目录下
ln -s ../../usr/include ./

3、编译安装QTE
1)、最基本的配置
./configure -prefix /usr -embedded arm -xplatform qws/linux-arm-g++ -depths 16 -qt-mouse-tslib
-prefix /usr 使用这个配置,编译后TE库文件即可放在目标文件系统的/usr/lib下,而不是默认/usr/local/Trolltech/QtEmbedded-4.5.1 这个很深的目录
2)、编译
make
cp lib/* /root/rootfs/usr/lib -rd 将QTE库文件拷贝到根文件系统的目录
cp plugins /root/rootfs/usr -rd 将QTE插件目录拷贝到根文件系统的目录

4、根文件系统的设置
1)、这时/root/rootfs/usr下应该有 bin etc include lib sbin目录
tslib生成的etc目录,包含一个tslib的配置文件 nf,编辑此文件,去掉module_raw input前的注释
mv etc ../ 移动到rootfs的根目录

2)、进行一次清理操作
arm-linux-strip lib/*.so
arm-linux-strip usr/lib/*.so

3)、编辑etc/profile,添加以下内容
export QWS_MOUSE_PROTO=Tslib:/dev/event0
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/nf
export TSLIB_PLUGINDIR=/usr/lib/ts

最后,通过mkyaffs2image 制作镜像,烧写镜像,启动ts_calibrate校验触屏即可。

请教QDatastream与QVariant的相关问题(QT编程)

QVariant V("123");
QByteArray b("321");
QDataStream o(&b,QIODevice::ReadWrite);
o << V;
cout<<" b:"<<b.data()<<endl;
cout<<" V:"<<V.toByteArray().data()<<endl;
我想问下为什么b输出为空?

参考技术A

1、如果将cout换为二进制文件QFile(或者查看调试时的变量b值),

    QFile file("file.dat");
    file.open(QIODevice::WriteOnly);    
    QDataStream out(&file);
    out<<V;    
    file.close();

那么会发现输出的结果是\\0 \\0 \\0 \\n \\0 \\0 \\0 \\0 6 \\0 '1' \\0 '2' \\0 '3'.

2、如果将o << V;替换为o << V.toByteArray();,那么结果为\\0 \\0 \\0 \\0 3 '1' '2' '3'.

3、如果直接将V输出到控制台上,显示结果为QVariant(QString, "123");

 

所以,推测为QVariant具有独特的内存结构,如果直接以QByteArray将其内存数据输出到控制台,由于内存格式仍为QVariant的内存结构,所以控制台上不能显示出来。

 

不过,再具体的就说不上来了,查看QVariant类定义,也没有发现为什么会有\\0 \\0 \\0 \\n等这样的数据。希望高手解答啊。

以上是关于请教QT5的移植问题的主要内容,如果未能解决你的问题,请参考以下文章

从 Qt4 移植到 Qt5,Qt::WA_PaintOutsidePaintEvent 不再存在

将 Qt5 应用程序反向移植到 Qt4 时替换 Q_NULLPTR?

QT5.6移植到ARM三星4412

移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)

移植qt5.3.1到arm

s5p4418 qt5.7.1移植与虚拟键盘修改