QLabel setText问题,求大神指导,路过的也帮忙看看。谢谢了

tt2com 2012-11-08 02:59:54
非常郁闷的问题
我写了个中文输入法
在windows下测试没有问题,重新编译下载到arm-linux下出现内存问题

void ad::UpBut()
{
if (m_start+L< m_word.count())
{
m_start += L;
for (int i=0;i<L;++i)
{
if (m_start+i<m_word.count())
{
m_label[i]->setText(m_word[m_start+i]);//内存大了增加
m_label[i]->show();
}
else
m_label[i]->hide();
}
}
butshow();
}

如上面代码如果,m_word 为一个QStringList内部为需要显示的中文字。在上位机没有问题,到下午机的时候,每次显示不同的中文第一次显示内存不断的增加,显示过的中文不在增加内存。而内存的增加非常厉害。
字库为中英文混合字库16mb的ttf文件。

不知道我的问题有没描述清楚,请大神指导下。我实在被这个内存打击的不行了。
我只能发100分的贴,有思路或者合理解释,当然最好是是解决的我追加2个100帖子。
大神们指导下吧
...全文
798 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiky 2013-02-06
  • 打赏
  • 举报
回复
不知楼主这问题解决了我,我只是简单的setText(str),str是一个字符串,长时候刷新后就会卡了,setText()越来越卡 http://bbs.csdn.net/topics/390366270?page=1#post-393664997
tt2com 2012-11-19
  • 打赏
  • 举报
回复
还有没人可以指导下?
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 16 楼 allencui0313 的回复:
我们一直和这个人联系 niannian.zhou@digia.com 他是中国Qt 的技术负责人之一。
哎,确认非商业版本用户,不提供服务啊.....
nossiac 2012-11-14
  • 打赏
  • 举报
回复
引用 27 楼 tt2com 的回复:
也就是说如果优化ttf文件就能解决这个问题?
应该说是优化font engine,也就是绘制字体的那个模块。 当然,前提是猜想正确。
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 26 楼 nossiac 的回复:
引用 12 楼 tt2com 的回复:引用 11 楼 ao834391367 的回复:LZ这show这里是数组m_label[i]里所有的QLabel都进行show了?是不是一直在new QLabel 然后setText,show了? 引用 10 楼 tt2com 的回复:哪位指导下啊 所有的对象均实例化一次。我想问题不在程序,如果程序造成的那么我在上位机上也会有问题……
也就是说如果优化ttf文件就能解决这个问题?
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 16 楼 allencui0313 的回复:
我们一直和这个人联系 niannian.zhou@digia.com 他是中国Qt 的技术负责人之一。
我使用的非商业版本,你们使用的是商业还是开源的版本?
nossiac 2012-11-14
  • 打赏
  • 举报
回复
引用 12 楼 tt2com 的回复:
引用 11 楼 ao834391367 的回复:LZ这show这里是数组m_label[i]里所有的QLabel都进行show了?是不是一直在new QLabel 然后setText,show了? 引用 10 楼 tt2com 的回复:哪位指导下啊 所有的对象均实例化一次。我想问题不在程序,如果程序造成的那么我在上位机上也会有问题。我测试过小一些的字体文件,加的会少一……
可能跟font engine的缓存有关。你使用font engine绘图时,它可能默认做了计算缓冲,一部结果常驻内在,能提升程序运行效果,但会增加内存占用。 如果你有负责font engine的同事,可以请他确认一下。
  • 打赏
  • 举报
回复
我们一直和这个人联系 niannian.zhou@digia.com 他是中国Qt 的技术负责人之一。
  • 打赏
  • 举报
回复
引用 14 楼 tt2com 的回复:
引用 13 楼 allencui0313 的回复:这个可以咨询专门做Qt的。。。。。 这个不是在坛子里面问问嘛。直接专业的 不是商业版本用户没得支持啊
咨询嘛。你可以邮件咨询下。所有用开源版的同学都应该算是他们潜在的客户~问问又不要钱~
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 13 楼 allencui0313 的回复:
这个可以咨询专门做Qt的。。。。。
这个不是在坛子里面问问嘛。直接专业的 不是商业版本用户没得支持啊
jdwx 2012-11-14
  • 打赏
  • 举报
回复
所有的对象均实例化一次。我想问题不在程序,如果程序造成的那么我在上位机上也会有问题。我测试过小一些的字体文件,加的会少一些。如果字体问题为16MB那么总体内存增加18MB左右为峰顶值(database中的所有中文显示一遍),如果字体为7MB那么增加峰顶值大概为10BM左右。 我希望有一个合理的解释,这是不是一个bug还是下位机本身显示字体的机制。
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 22 楼 digia_birdman 的回复:
用CSDN上现有的imframe输入法在arm板上做了测试,不存在内存持续增加的现象。 这是QWS版本的输入法,另外用的字体是unifont。
我找个测试下,我用的是ttf的字体,自带的unifont无法满足我UI需求
tt2com 2012-11-14
  • 打赏
  • 举报
回复
引用 21 楼 allencui0313 的回复:
windows 可用? 输入法自己写的?
PC上windows和linux都没有异常,但下载到板子上有存在异常了
digia_birdman 2012-11-14
  • 打赏
  • 举报
回复
用CSDN上现有的imframe输入法在arm板上做了测试,不存在内存持续增加的现象。 这是QWS版本的输入法,另外用的字体是unifont。
  • 打赏
  • 举报
回复
windows 可用? 输入法自己写的?
digia_birdman 2012-11-14
  • 打赏
  • 举报
回复
1. 同意楼上那位兄弟的说法 2. 如果使用的是qws 版本的qt的话,输入法需要使用QWSInputMethod来实现,其他的方法或许也可以,但是QWSInputMethod是最好的选择。 3. 你这个输入法,每匹配一个字符就要new一个label,用固定个数来实现翻页,更好(楼上那位兄弟的建议)
挣扎中前行 2012-11-14
  • 打赏
  • 举报
回复
你可以先判断下if(!m_label[i]->isVisible())是否可见判断是否show()。 另外你的意思是不是每个匹配的字都需要new一个lable来显示?你可以固定lable个数使用方向键翻页实现匹配候选字的显示!
tt2com 2012-11-13
  • 打赏
  • 举报
回复
哪位指导下啊
  • 打赏
  • 举报
回复
这个可以咨询专门做Qt的。。。。。
tt2com 2012-11-13
  • 打赏
  • 举报
回复
引用 11 楼 ao834391367 的回复:
LZ这show这里是数组m_label[i]里所有的QLabel都进行show了?是不是一直在new QLabel 然后setText,show了? 引用 10 楼 tt2com 的回复:哪位指导下啊
所有的对象均实例化一次。我想问题不在程序,如果程序造成的那么我在上位机上也会有问题。我测试过小一些的字体文件,加的会少一些。如果字体问题为16MB那么总体内存增加18MB左右为峰顶值(database中的所有中文显示一遍),如果字体为7MB那么增加峰顶值大概为10BM左右。 我希望有一个合理的解释,这是不是一个bug还是下位机本身显示字体的机制。 那位有经验的?
加载更多回复(10)

16,225

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧