首页| 论坛| 消息

标题:QTE剪裁与性能优化
作者:twicave
日期:2008-10-18 08:26
内容:

QtE的性能优化是一个不容回避的问题。已经看到了很多网友在讨论configure参数等话题。其实,Trolltech的官方网站上对这个问题已经有很深入的解释。本文参考的相关文章参加文章末尾的[引用]部分。
1.configure参数
通常情况下,只有少数一个或者几个程序运行在嵌入式设备上,这些程序并不会覆盖Qt的所有功能。所以,使用Qt提供的源代码编译前的选项配置,可以在生成的库文件中剔除不需要的功能。
./configure 可以带上"-no-feature-就可以关闭某项功能,比如
./configure -no-feature-thread
关于qt支持的功能列表可以参考 ./src/corelib/global/qfeatures.txt
值得一提的是QT为我们提供的一个工具"qconfig",在网络上搜索了一下,居然很少见到有关这个工具的内容。它包含在QTE,QT-x11等多个版本里面,最好用desktop的自带的编译器来编译它,它的位置在./tools/qconfig里面。很遗憾,原来编译x11平台的qte的时候把工作目录删掉了,现在需要重新编译一遍,编译出这个工具。然后使用它生成需要的qte-for-arm的配置文件。再次使用arm-linux-gcc工具链编译qte.希望后来的同志不要重蹈我的覆辙。
所有的配置文件都放在./src/corelib/global/下面,可以用qconfig打开几个系统缺省的配置文件查看一下作为参考,最终将你的文件存储为./src/corelib/global/gconfig-myfile.h
最终的命令行是 ./configure -qconfig myfile
当然了如果想省事,可以直接利用系统缺省的一组配置:
./configure -qconfig minimal
等。。。

2.性能优化
1)不要频繁的new delete窗体,改用hide(), show()
2)不要在启动时就建立所有的窗体,使用延迟机制或者在需要时再建立。
3)使用静态链接。 关于这一点我还没有尝试,不过据QT的资料说,它可以加快启动时间和内存占用率。缺点是对flexibility和robustness的损害。我最大的疑问是按照字面理解这是否意味着程序运行时不再需要QT lib?如果是这样的话,那就是好事了。
./configure -static可以将QT设置为静态链接模式.
4)不要使用new,delete机制,因为很多编译器对这类内存分配函数的执行效率不高。可以使用:
void *operator new[](size_t size)
{
return malloc(size);
}
void *operator new(size_t size)
{
return malloc(size);
}
void operator delete[](void *ptr)
{
free(ptr);
}
void operator delete[](void..


#1 [netlove 10-20 15:41]
正在寻找这方面的资料。第一条我对那个qconfig不明白,我一直用qte,但是没用过这个东西。
第2条的前4很赞同,对5有疑问,如果关闭了双缓冲,界面会闪烁吗?QDirectPainter没用过。我一直用qte-2.3.10,感觉论坛上嵌入式的很少,今天终于碰到一个高手
#2 [twicave 10-20 18:04]
高手谈不上,我现在刚刚开始接触这些东西。这篇文章的大部分内容都来自QT的在线文档(就是文末的链接),现在越来越觉得一个组织得比较完善的在线文档系统比什么都重要。
Linux下软件的文档实在太乱了。
#3 [twicave 11-15 16:29]
就我目前的理解,QT所使用的双缓冲模式与我们平时说的双缓冲并不相同.
嵌入式设备的双缓冲一般是分配两个硬件缓冲,通过改写LCD的VBuffer地址实现快速切换.
而QT,它在系统中所处的级别估计已经无法对硬件缓冲区的位置进行修改了.
所以,它的硬件缓冲区是唯一的.
QT所做的工作是,首先刷在内存里.然后贴向目标硬件缓冲区.

而DirectPainter的作用,就是提供给用户一个权限.可以直接修改硬件缓冲区.

这些都还是假说.等待后续的文章吧.
#4 [jzj139 11-18 16:53]
有前途 加油吧
#5 [e2008824 01-28 11:22]
请教下,如何优化图片的显示速度勒???

<< 1 2 >> (1/2)

回复 发表
主题 版块