根据你提供的代码,出现问题的原因可能是以下两点:
- 第一个问题是在处理有重复情况时没有正确更新索引变量x。在循环中,如果找到了重复的m_id,需要将x设为当前索引i+1,以便在后面正确写入数组索引。
if(m_list.size()!=0){
for( int i=0;i<m_list.size();i++){
if(m_id==m_list[i]){
m++;
x = i + 1; // 更新x为当前索引+1
}
}
// ...
}
- 第二个问题可能与QSettings中的操作有关。当从中间位置删除元素时,它们不会自动调整数组索引。因此,在移除元素后,需要手动重新设置每个条目的值。
else if(m!=0){
qDebug()<<"有重复"<<x;
like_setting->beginWriteArray("shoucang");
like_setting->setArrayIndex(x);
like_setting->remove("id");
like_setting->remove("singer");
// 手动调整数组索引
for (int i = x + 1; i < m_list.size(); ++i) {
like_setting->setArrayIndex(i);
QString id = like_setting->value("id").toString();
QString singer = like_setting->value("singer").toString();
like_setting->setArrayIndex(i - 1);
like_setting->setValue("id", id);
like_setting->setValue("singer", singer);
}
like_setting->endArray();
ui->pushButton->setIcon(QIcon(":/new/prefix1/image/buxihuan.png"));
x=0;
}
通过上述修改,应该能够解决从收藏第三首歌开始索引不正确的问题。但请注意,在修改QSettings时可能需要更多的调整,以确保正确的数组操作和数据存储。
内容由零声教学AI助手提供,问题来源于学员提问




