• 9088阅读
  • 10回复

[提问]Qhash出现的错误!大侠们指点下!!!!!在线等!!版主救命啊!!!!!! [复制链接]

上一主题 下一主题
离线aishang
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-28
  QHashIterator<QByteArray,QTreeWidgetItem *> relate(hash);
 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()));
//                 tree->openPersistentEditor(Tag_N1,1);
//                 value = percent;
                 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)+"%");                    
//                   value = percent;
//                   tree->openPersistentEditor(relate.value(),1);
                  qDebug() << relate.value();
                   break;
               }
               if(relate.key() != Tag_name.toHex())
               {
                   if(hash.size() == size)
                   {
                        hash.insert(Tag_name.toHex(),Tag_N1);
                        Tag_N1 = new QTreeWidgetItem(tree,QStringList(relate.key()));
//                        tree->openPersistentEditor(Tag_N1,1);
//                        value = percent;
                        Tag_N1->setText(1,QString::number(percent)+"%");
                   }
               }size++;
            }代码如上。我是比较0列,跟新第1列,可是一到relate.value()->setText(1,QString::number(percent)+"%");     这句的时候就出错,求解。这句是当0列相同的时候跟新第1列!高手指点下,在线等!
[ 此帖被aishang在2011-03-28 19:04重新编辑 ]
离线aishang
只看该作者 1楼 发表于: 2011-03-29
没人回复自己顶个!求给力啊!!!!!!!!!
离线dbzhang800

只看该作者 2楼 发表于: 2011-03-29
引用楼主aishang于2011-03-28 19:03发表的 Qhash出现的错误!大侠们指点下!!!!!在线等!!版主救命啊!!!!!! :
            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)+"%");
            }


这个问题,你前些天好像问过吧?

请先解释这段代码是做什么的。Tag_N1 到底是个什么东西,有没有初始化?如此使用有什么用途等...
离线aishang
只看该作者 3楼 发表于: 2011-03-29
回 2楼(dbzhang800) 的帖子
首先感谢能给我回复,上次你也问这个了,我给你回复了的。Tag_N1是我要往tree里面添加item的一个变量。我只是在头文件里面定义了一下QTreeWidgetItem *Tag_N1;
代码里面有体现的,当hash空的时候我就用这个Tag_N1创建了一个item。让后利用hash进行判断添加。如果新来的数据和item的第一列相同,就改变第二列的,如何没有找到相同的,就在重新创建一个item。不过每次都是用的你问的这个Tag_N1创建的。难道问题出在这里了嘛?我试过了,如果去掉relate.value()->setText(1,QString::number(percent)+"%");     这句,item是可以创建很多个第一列不同的出来的。可是不能更新!
离线aishang
只看该作者 4楼 发表于: 2011-03-29
继续求给力!
离线dbzhang800

只看该作者 5楼 发表于: 2011-03-29
好吧,你不妨先给我解释下面的代码有什么问题:

int * a, *b;
a = b;
b = new int(10);

题外:
如果对指针仍有疑问,不妨找本C或C++的书看看
离线aishang
只看该作者 6楼 发表于: 2011-03-29
回 5楼(dbzhang800) 的帖子
a=b属于非法操作。因为a,b没有初始化。                
hash.insert(Tag_name.toHex(),Tag_N1);
Tag_N1 = new QTreeWidgetItem(tree,QStringList(Tag_name.toHex()));
这两句换一下位置就可以。但是换了位置以后hash的遍历是有问题的啊。。。
就先已经显示了才去查找是否有相同的然后去更新。。。
离线梅克斯
只看该作者 7楼 发表于: 2011-03-29
设个断点调试下,看看有什么指针错误之类的
离线aishang
只看该作者 8楼 发表于: 2011-03-29
回 7楼(梅克斯) 的帖子
错误是在relate.value()->setText(1,QString::number(percent)+"%");    这句这里。楼上的已经给说明了,是未初始化完成就操作了指针。我调换了hash.insert(Tag_name.toHex(),Tag_N1);
Tag_N1 = new QTreeWidgetItem(tree,QStringList(Tag_name.toHex()));的位置就不会出现错误了。但是达不到我比较第一列更新第二列的效果了。会出现很多第一个相同的item出来。我想可以是先显示了然后才比较的原因吧!第二列一直在更新。
离线aishang
只看该作者 9楼 发表于: 2011-03-29
另外问下楼上的几位高手。我上网上找了下qt技术群就那么几个?几位高手又加群吗?
离线aishang
只看该作者 10楼 发表于: 2011-03-29
问题搞定,说起来惭愧。谢谢大家支持,尤其是dbzhang800 同学。谢谢大家。

                 hash.insert(Tag_name.toHex(),Tag_N1);
                 Tag_N1 = new QTreeWidgetItem(tree,QStringList(Tag_name.toHex()));
调换下位置就可以了。
快速回复
限100 字节
 
上一个 下一个