• 1150阅读
  • 2回复

[讨论]重写QSqlQueryModel时出现的疑问 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2022-02-22
回复本帖可获得1RMB金钱奖励!
每人最多可获奖1次,奖池剩余49RMB金钱 (中奖几率10%)
各位大佬,请问以下是我重写QSqlQueryModel后,做更新某个字段时,发现数据的数据已经更新,但表格QTableView仍未更新,以上代码有什么问题吗?

  1. bool CustomDbModel::setData(const QModelIndex &index, const QVariant &value, int role)
  2. {
  3. QModelIndex id0 = QSqlQueryModelindex(index.row(), 0);//第0列
  4. QModelIndex id1 = QSqlQueryModelindex(index.row(), 1);//第1列
  5. QModelIndex id2 = QSqlQueryModelindex(index.row(), 2);//第2列
  6. STD st = m_infoList.at(index.row());
  7. if(index.isValid())
  8. {
  9.     switch (role)
  10.     {
  11.     case Qt::TextAlignmentRole:
  12.         return Qt::AlignVCenter | Qt::AlignHCenter;
  13.     case Qt::EditRole:
  14.         if(index.column() == 3)
  15.         {
  16.             QString strID = data(id0, Qt::DisplayRole).toString();
  17.             QString strName = data(id1, Qt::DisplayRole).toString();
  18.             QString strSex = data(id2, Qt::DisplayRole).toString();
  19.             QSqlQuery query;
  20.             query.prepare("update sthudent set score = :score where id = :id and name = :name and sex = :sex;");
  21.             query.bindValue(":score", value.toString());
  22.             query.bindValue(":id", strMModel);
  23.             query.bindValue(":name", strName);
  24.             query.bindValue(":sex", strSex);
  25.             bool isOk = query.exec();
  26.             qWarning()<<"isOk ="<<isOk; //isok打印是ture,数据库更新成功
  27.             if(isOk)
  28.             {
  29.                 st.score= value.toString();//更新表格数据
  30.                 m_infoList.replace(index.row(), st);
  31.                 emit dataChanged(index, index);
  32.                 refrushModel();//刷新模型
  33.             }
  34.             return isOk;
  35.         }
  36.         break;
  37.     default:
  38.         break;
  39.     }
  40.     return false;
  41. }
  42. return false;
  43. }
  44. void CustomDbModel::refrushModel()
  45. {
  46. beginResetModel();
  47. endResetModel();
  48. }

各位大佬,我调试和测试很久,未找到原因。明明那个query.exec();返回true,并且数据库也同步更新了,也重新刷新模型了,可QTableView仍然没有同步显示数据,除非重新启动整个应用程序。麻烦各位大佬有空的指点一下,小弟在此不胜感激!
离线liudianwu

只看该作者 1楼 发表于: 2022-02-22
回帖奖励+ 1
刷新试试
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线lwei24

只看该作者 2楼 发表于: 2022-02-22
回 liudianwu 的帖子
liudianwu:刷新试试 (2022-02-22 12:26) 

是要刷新(⊙_⊙)?refrushModel()已刷新模型了,数据库里的数据已经更新了,但是表格QTableView却没有同步更新。
快速回复
限100 字节
 
上一个 下一个