QSqlTableModel和QTableView设置复选框
2015-08-11 16:32
681 查看
//头文件
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;
}
效果图
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;
}
效果图
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- 基于PyQt5的快速开发框架QFramer
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)
- qt 学习小节
- QT的命名风格
- QT 中的sleep
- QT 串口的监控
- 在VS2010下配置QT和ITK+VTK