QTableView 列加入复选框

重写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);
    }
}

项目代码效果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值