• 10319阅读
  • 0回复

[提问]QHash遍历问题!!!求救啊!急!!!! [复制链接]

上一主题 下一主题
离线aishang
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-14
int MainWindow::dispose(QByteArray Tag_data)
{
int all;
QByteArray Tag_name;
unsigned char percent;
QHashIterator<QByteArray,QTreeWidgetItem *> relate(hash);
QHashIterator<QByteArray,int> relateInt(hashInt);
int xx=0;
for(all = 0;all <Tag_data.length();all++)
{
if(Tag_data.at(all+4) == 0)
{
all = all + Tag_data.at(all +2)-1;
}
else
if(Tag_data.at(all+4) > 0)
{
Tag_name = Tag_data.mid((all + 12),12);
qDebug() << Tag_name.toHex();
unsigned char temp =Tag_data.at((all + 5));
percent = temp*100/255;
if(hash.isEmpty())
{
QString TagString;
int i=0;
for(int str = 0;str <Tag_name.length()*3-2;)
{
TagString[str] = Tag_name.toHex().at(i);
TagString[str+1] = Tag_name.toHex().at(i+1);
if(str + 2 < Tag_name.length()*3-2)
{
TagString[str+2] = '-';
}
str = str + 3;
i = i+2;
}
Tag_N1 = new QTreeWidgetItem(tree,QStringList(TagString));
hash.insert(Tag_name.toHex(),Tag_N1);
value = percent;
//tree->openPersistentEditor(Tag_N1,1);
//tree->setIndexWidget(0,new QProgressBar(tree));
Tag_N1->setText(1,QString::number(percent)+"%");
int degree = 1;
Tag_N1->setText(2,QString::number(degree));
hashInt.insert(Tag_name.toHex(),degree);
}
int size = 1;
while (relate.hasNext())
{
relate.next();
if(relate.key() == Tag_name.toHex())
{
xx++;
qDebug() << xx;
relate.value()->setText(1,QString::number(percent)+"%");
while(relateInt.hasNext())
{
relateInt.next();
if(relateInt.key() == Tag_name.toHex())
{
int IntTemp = relateInt.value();
relate.value()->setText(2,QString::number(++IntTemp));
hashInt[Tag_name.toHex()] = IntTemp;
}
}
break;
}
if(relate.key() != Tag_name.toHex())
{
if(hash.size() == size)
{
QString TagString;
int i=0;
for(int str = 0;str <Tag_name.length()*3-2;)
{
TagString[str] = Tag_name.toHex().at(i);
TagString[str+1] = Tag_name.toHex().at(i+1);
if(str + 2 < Tag_name.length()*3-2)
{
TagString[str+2] = '-';
}
str = str + 3;
i = i+2;
}
Tag_N1 = new QTreeWidgetItem(tree,QStringList(TagString));
hash.insert(Tag_name.toHex(),Tag_N1);
Tag_N1->setText(1,QString::number(percent)+"%");
int degree = 1;
Tag_N1->setText(2,QString::number(degree));
hashInt.insert(Tag_name.toHex(),degree);
}
}size++;
}
}
all = all + Tag_data.at(all +2)-1;
}
return 1;
}这个是我的代码。
0000000068d0384100000467"
"0000000068d0384100000467"
1
"0000000068d0384100000467"
1
"0000000068d0384100000467"
"0000000068d0384100000467"
1
这个是我的打印输出。为什么每次比较只能进行一次?明显有多个相同的数据啊!有的时候4个相同的进来也只是比较一次。求原因!!!!
快速回复
限100 字节
 
上一个 下一个