按照《精通Qt4编程》12章的例子,写了一个继承自QSqlQueryModel的自定义模型类,重写了flags()和setData()函数,代码如下:
#include "querymodelorder.h"
SqlQueryModelOrder::SqlQueryModelOrder(QObject *parent):QSqlQueryModel(parent)
{
}
Qt::ItemFlags SqlQueryModelOrder::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags=QSqlQueryModel::flags(index);
if(index.column()==3)//订货数量
{
flags |=Qt::ItemIsEditable;
return flags;
}
}
bool SqlQueryModelOrder::setData(const QModelIndex &index,const QVariant &value,int role)
{
if(index.column()!=3)
return false;
if(index.isValid()&&role==Qt::EditRole)
{
QModelIndex pkIndex=QSqlQueryModel::index(index.row(),0);
int id=data(pkIndex).toInt();
//clear();
bool ok=setNum(id,value.toInt());
emit dataChanged(index,index);
//refresh();
return ok;
}
return false;
}
bool SqlQueryModelOrder::setNum(int orderid,int ordernum)
{
QSqlQuery query;
query.prepare("update orderform set ordernum=? where orderid=?");
query.addBindValue(ordernum);
query.addBindValue(orderid);
return query.exec();
}
用的是QTableView显示模型,功能可以实现。但是,修改第三列的数据,当焦点移开后,显示的还是原来的数据(数据库中已经改变),如何让QTableVie中及时更新,显示修改后的数据?搞了好久了,写了个自定义代理也不行,快要疯了,请高手指教啊。