如果允许用户编辑view中的item,那么必须重写model中的setData()函数和flag()函数,
//允许用户编辑item,必须重写setData()函数
bool TradeTableModel::setData ( const QModelIndex & index, const QVariant & value, int role/* = Qt::EditRole */){
//允许用户编辑的只有3列 第一列CheckBox, 包裹数, 保价金额
if(role == Qt::CheckStateRole && index.column() == ORDER_ID)
{
//用户勾选 每行第一列的CheckBox
ORDER_LIST_STRUCT& orderData = m_OrderList[row];
orderData.m_bChecked = !orderData.m_bChecked;
//该行checkBox 勾选状态
emit ModelCheckBoxStateChanged(orderData.m_bChecked ? Qt::Checked : Qt::Unchecked);
emit layoutChanged();
}
Qt::ItemFlags TradeTableModel::flags ( const QModelIndex & index ) const
{
Qt::ItemFlags flags = QAbstractItemModel::flags(index);
switch(index.column())
{
case ORDER_ID:
flags |= Qt::ItemIsUserCheckable; ///该角色,将第一列设置为CheckBox控件
break;
case PACKAGE_NUM:
{
if (index.row() < m_OrderList.size())
{
const ORDER_LIST_STRUCT& orderData = m_OrderList[index.row()];
if ((m_UserType == CurrentUser::UT_SOP) && !orderData.m_cky2Name.isEmpty())//该订单是SOPL订单,则禁用
{
}
else if(m_bEditPackageNum )
{
flags |= Qt::ItemIsEditable;
}
}
}
break;