非常郁闷的问题
我写了个中文输入法
在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帖子。
大神们指导下吧
------解决方案--------------------
你确定问题是在这个函数里面?
我觉得问题倒不是在这里,有可能是其他的地方的问题。
------解决方案--------------------
你如何确定内存突然异常增加是因为 setText ,而不是show ??
不同图形库(和系统构架有关)show的实现方式不同
------解决方案--------------------
m_label[i]->setText(m_word[m_start+i]);//内存大了增加
m_label[i]->show();
可以测试下吧这两行代码都注释掉,看内存增加不?
然后再分别注释一行,而另一个不注释掉,看内存情况?
最后再确定问题
或者在for循环一次后加个sleep延迟试试效果
------解决方案--------------------
那就注释掉,看看内存怎么变化的。
------解决方案--------------------
linux下中文显示是正常的
问题还是在别的地方吧
------解决方案--------------------
版主的这个头像怎么看得怪怪的...
Ps:还是觉得之前清纯的那个nice点...
------解决方案--------------------
LZ这show这里是数组m_label[i]里所有的QLabel都进行show了?是不是一直在new QLabel 然后setText,show了?
------解决方案--------------------
这个可以咨询专门做Qt的。。。。。
------解决方案--------------------
咨询嘛。你可以邮件咨询下。所有用开源版的同学都应该算是他们潜在的客户~问问又不要钱~
------解决方案--------------------
我们一直和这个人联系 niannian.zhou@digia.com 他是中国Qt 的技术负责人之一。
------解决方案--------------------
你可以先判断下if(!m_label[i]->isVisible())是否可见判断是否show()。
另外你的意思是不是每个匹配的字都需要new一个lable来显示?你可以固定lable个数使用方向键翻页实现匹配候选字的显示!
------解决方案--------------------
1. 同意楼上那位兄弟的说法
2. 如果使用的是qws 版本的qt的话,输入法需要使用QWSInputMethod来实现,其他的方法或许也可以,但是QWSInputMethod是最好的选择。
3. 你这个输入法,每匹配一个字符就要new一个label,用固定个数来实现翻页,更好(楼上那位兄弟的建议)
------解决方案--------------------
windows 可用? 输入法自己写的?
------解决方案--------------------
用CSDN上现有的imframe输入法在arm板上做了测试,不存在内存持续增加的现象。
这是QWS版本的输入法,另外用的字体是unifont。
------解决方案--------------------