各位大佬,请问以下是我重写QSqlQueryModel后,做更新某个字段时,发现
数据库的数据已经更新,但表格
QTableView仍未更新,以上代码有什么
问题吗?
- bool CustomDbModel::setData(const QModelIndex &index, const QVariant &value, int role)
- {
- QModelIndex id0 = QSqlQueryModelindex(index.row(), 0);//第0列
- QModelIndex id1 = QSqlQueryModelindex(index.row(), 1);//第1列
- QModelIndex id2 = QSqlQueryModelindex(index.row(), 2);//第2列
- STD st = m_infoList.at(index.row());
- if(index.isValid())
- {
- switch (role)
- {
- case Qt::TextAlignmentRole:
- return Qt::AlignVCenter | Qt::AlignHCenter;
- case Qt::EditRole:
- if(index.column() == 3)
- {
- QString strID = data(id0, Qt::DisplayRole).toString();
- QString strName = data(id1, Qt::DisplayRole).toString();
- QString strSex = data(id2, Qt::DisplayRole).toString();
- QSqlQuery query;
- query.prepare("update sthudent set score = :score where id = :id and name = :name and sex = :sex;");
- query.bindValue(":score", value.toString());
- query.bindValue(":id", strMModel);
- query.bindValue(":name", strName);
- query.bindValue(":sex", strSex);
- bool isOk = query.exec();
- qWarning()<<"isOk ="<<isOk; //isok打印是ture,数据库更新成功
- if(isOk)
- {
- st.score= value.toString();//更新表格数据
- m_infoList.replace(index.row(), st);
- emit dataChanged(index, index);
- refrushModel();//刷新模型
- }
- return isOk;
- }
- break;
- default:
- break;
- }
- return false;
- }
- return false;
- }
- void CustomDbModel::refrushModel()
- {
- beginResetModel();
- endResetModel();
- }
各位大佬,我
调试和测试很久,未找到原因。明明那个query.exec();返回true,并且数据库也同步更新了,也重新刷新模型了,可QTableView仍然
没有同步
显示数据,除非重新启动整个应用程序。麻烦各位大佬有空的指点一下,小弟在此不胜感激!