第一次使用QHash显示。发现一个问题,Qhash这个表刚开是空的,所以我在循环前先插入了一条信息,可是在显示的时候会出现内存错误,就是每次显示的第一条数据变化的时候就出错,好像第一个item不能修改似的。求解!
int Thread::dispose(QByteArray Tag_data)
{
int all;
QByteArray P_Null;
P_Null[0] = 11;
QByteArray Tag_name;
unsigned char percent;
QHashIterator<QByteArray,QTreeWidgetItem *> relate(hash);
qDebug() << Tag_data.length() << 2;
for(all = 0;all <Tag_data.length();all++)
{
if(Tag_data.at(all+4) == 0)
{
all = all + Tag_data.at(all +2)-1;
qDebug() << all << 1;
}
else
if(Tag_data.at(all+4) > 0)
{
Tag_name = Tag_data.mid((all + 12),12);
unsigned char temp =Tag_data.at((all + 5));
percent = temp*100/255;
all = all + Tag_data.at(all +2)-1;
if(hash.isEmpty())
{
hash.insert(Tag_name.toHex(),Tag_N1);
Tag_N1 = new QTreeWidgetItem(tree,QStringList(Tag_name.toHex()));
Tag_N1->setText(1,QString::number(percent)+"%");
}
int size = 1;
while (relate.hasNext())
{
relate.next();
if(relate.key() == Tag_name.toHex())
{
relate.value()->setText(1,QString::number(percent)+"%");
break;
}
if(relate.key() != Tag_name.toHex())
{
if(hash.size() == size)
{
hash.insert(Tag_name.toHex(),Tag_N1);
Tag_N1 = new QTreeWidgetItem(tree,QStringList(Tag_name.toHex()));
Tag_N1->setText(1,QString::number(percent)+"%");
}
}size++;
}
}
}
return 1;
}