QSqlTableModel和QTableView设置复选框

本文详细介绍了SQL模型类的实现,包括初始化方法、数据设置、数据获取和项目标志等功能,重点阐述了如何通过设置检查状态来管理数据选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//头文件

class SqlTableModel:public QSqlTableModel

{
Q_OBJECT  


public:  
SqlTableModel ( QObject * parent = 0, QSqlDatabase db = QSqlDatabase() );  
bool setData( const QModelIndex &index, const QVariant &value, int role );
QVariant data(const QModelIndex &index, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const;

};

//cpp

QMap<int, Qt::CheckState> check_state_map; 
// setData()方法主要用来设置是否被选中,然后将对应的状态保存到QMap中
SqlTableModel::SqlTableModel ( QObject * parent, QSqlDatabase db ):QSqlTableModel(parent, db)
{
}
bool SqlTableModel::setData( const QModelIndex &index, const QVariant &value, int role )  
{  
if(!index.isValid())  
return false;  


if (role == Qt::CheckStateRole && index.column() == 0)  
{  
check_state_map[index.row()] = (value == Qt::Checked ? Qt::Checked : Qt::Unchecked); 
return true;  
}
else 
return QSqlTableModel::setData(index, value,role);



// data()方法主要用来显示,取出QMap中的值,返回对应的状态
QVariant SqlTableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.column() != 0 )
{
return QSqlTableModel::data(index, role);
}
switch(role)
{
case Qt::CheckStateRole:
if(index.column() == 0)   
{   
if (check_state_map.contains(index.row()))   
return check_state_map[index.row()] == Qt::Checked ? Qt::Checked : Qt::Unchecked; 
return Qt::Unchecked;    
}
default:
return QVariant();
}
return QVariant();
}
//flag()方法主要设置用户可选角色,绘制出QCheckBox
Qt::ItemFlags SqlTableModel::flags(const QModelIndex &index) const
{
if (!index.isValid())  
return 0;  


if (index.column() == 0)  
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;  
else
return QSqlTableModel::flags(index);
return  Qt::ItemIsEnabled | Qt::ItemIsSelectable;  
}

效果图


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值