学Qt也有一段时间了。最近在做小电脑学习系统,也都分了很多模块,有些模块的界面,功能差不多,所以做了一些自定义控件。
一些模块的轻量级框架,很多模块,只要按这个框架改动一些,大概就可以做成一个模块啦。很方便。
但这些框架,当项目时间紧急,自定义控件没真正的花时间去测试过,对一些BUG,性能方面,代码的可读性,等等,而且都是在PC机上运行,所以,在速度,代码的优化上,存在一定的隐患,当后期维护的时候,出现了大量的BUG,而且在都在这个框架上,所以大量的模块要修改,和优化,花费了大量的时间和人力,这是在开发项目当中,不该出现这样的事件,至少要把框架优化,和测试。
今天在小电脑上,运行一个模块,加载窗体的时候,速度很慢,在窗体打开之前到窗体完全显示数据,窗还在一闪一闪,看起来非常恶心,所以在PC机上,进行了一些优化,情况大概是这样,打开窗体,程序根据读取XML文件显示窗体里的一个文件列表,当时这个列表大概有250个文件。最终打开窗体。
程序分析:读取XML数据,根据XML节点,把每一个XML节点转换为一个自定义对象存起来,再根据转换的XML自定义对象,把XML对象,一个一个的用Label控件显示出来。(当时这个Label控件是自定义的),然后最终把传统显示出来。就这样一个简单的数据加载,怎么会启动的那么慢呢? 开始一直认为,是XML转换为自定义对象这个环节,拖慢了速度,经过QTime的测试,发现有200毫秒左右的加载时间(这是在PC上测试的时间),花费在XML转换为自定义对象的这个环节上,但这样的速度还是可以接受的。最终发现,程序在把XML自定义对象转换为Label时,花费的时候有4秒多,当时我吓到了。怎么可能加载那么长的时间呢?问题出现在自定义的Label上。在自定义Label里。实现了很多功能,而且在创建Label的时候,初始化了大量的数据,还把Label设为hide,而在程序中,再用show方法把Label显示出来。在Label身上耗掉了太多了时间,而在程序中,自定义Label只是用到一个点击功能!真的。。。。最后程序500毫秒就能打开!
对一些自定义控件,要小心使用,当不需要该功能,或在初始化自定义控件时,最后不要加载太多的数据!好了,在学习Qt的路上一些小小的教训吧,就这样把,,继续修让人无奈的BUG!!