• 3311阅读
  • 5回复

qt4.5中自定义模型数据更新问题 [复制链接]

上一主题 下一主题
离线renr1981
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-20
按照《精通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中及时更新,显示修改后的数据?搞了好久了,写了个自定义代理也不行,快要疯了,请高手指教啊。
离线foxyz

只看该作者 1楼 发表于: 2009-08-20
你最好看看文档,好像修改完数据emit 一个dataChanged的signal应该就没问题了。不需要使用beginInsertRows,endInsertRows
离线renr1981
只看该作者 2楼 发表于: 2009-08-21
在setData中调用dataChanged了,没用
离线renr1981
只看该作者 3楼 发表于: 2009-08-21
dataChanged没有参数,编译不过
离线foxyz

只看该作者 4楼 发表于: 2009-08-21
你的header file 能否也贴出来?
离线renr1981
只看该作者 5楼 发表于: 2009-08-21
查了qt自带的例子,原来refresh()需要自己定义。现在问题已经解决了
快速回复
限100 字节
 
上一个 下一个