• 8260阅读
  • 4回复

QTE4.5.2 程序运行速度问题 [复制链接]

上一主题 下一主题
离线wato
 
只看楼主 倒序阅读 楼主  发表于: 2009-11-25
    发现QTE程序在开发板上启动的时候很慢

这个倒无所谓,要命的是界面切换的时候中间有明显的停滞;

如果先hide旧页面,再show出新页面,期间会有近一秒钟的时间屏幕上无界面,而是露出了绿底;

请大家传授点优化的方法,stylesheet是否影响颇大?
离线rockyluo

只看该作者 1楼 发表于: 2009-11-26
嵌入式硬件资源本来就很有限
旧页面不要hide,hide的话它还占用内存
应该delete掉,再show新界面    想再显示旧界面的话就重新创建了。
先show新界面,再delete掉旧界面也行,这样就看不到绿色底了,一定保证旧页面delete掉
                                                                                                              我们要团结一心,秉承Linux的开源精神,共享Qt问题的解决方法!
离线wato
只看该作者 2楼 发表于: 2009-11-26
多谢前辈指点
离线wato
只看该作者 3楼 发表于: 2009-11-26
下面是qt的一些性能优化建议,有人翻译过来的:

1)不要频繁的new delete窗体,改用hide(), show()
2)不要在启动时就建立所有的窗体,使用延迟机制或者在需要时再建立。
3) 使用静态链接。  关于这一点我还没有尝试,不过据QT的资料说,它可以加快启动时间和内存占用率。缺点是对flexibility和robustness的损害。

./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 *ptr, size_t)
{
    free(ptr);
}

void operator delete(void *ptr)
{
    free(ptr);
}

void operator delete(void *ptr, size_t)
{
    free(ptr);
}
将缺省的new delete替换掉。

5)关闭双缓冲。通常为了防止界面闪烁,所有的窗体并不直接写屏幕,而是先写入一个buffer,然后由QT,负责将其写入硬件显示缓冲区。关闭双缓冲有两种方式:
1。为每一个QWidget设置Qt::WA_PaintOnScreen属性。
2。使用QDirectPainter
[ 此帖被wato在2009-11-27 09:13重新编辑 ]
离线xiaolibucuo
只看该作者 4楼 发表于: 2011-03-18
回 3楼(wato) 的帖子
那你最后是怎么解决的
快速回复
限100 字节
 
上一个 下一个