重写QSqlTableModel 模型的data,setData,flags,根据数据库数据展示复选框状态,点击复选按钮更新数据库值
关键代码
QVariant CMySqlTableModel::data(const QModelIndex& index, int role) const
{
QVariant value = QSqlTableModel::data(index, role);
if (Qt::CheckStateRole == role)
{
if (index.column() == 5)
return QSqlTableModel::data(index, Qt::DisplayRole).toBool()? Qt::Checked : Qt::Unchecked;
}
return value;
}
bool CMySqlTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (!index.isValid())
return false;
int nColumn = index.column();
if (role == Qt::CheckStateRole)
{
if (nColumn == 5)//复选框的列号
{
QSqlTableModel::setData(index, value, Qt::CheckStateRole);
bool res = false;
if (value.toInt() == Qt::Checked)
{
res = QSqlTableModel::setData(index, 1, Qt::EditRole);
}
else
{
res=QSqlTableModel::setData(index, 0, Qt::EditRole);
}
submitAll();
emit dataChanged(index, index);
return res;
}
}
return QSqlTableModel::setData(index, value, role);
}
Qt::ItemFlags CMySqlTableModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return QSqlTableModel::flags(index);
Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if (index.column() == 5)
{
flags = QSqlTableModel::flags(index)|Qt::ItemIsUserCheckable;
return flags;
}
else
{
return QSqlTableModel::flags(index);
}
}
项目代码效果