当前位置: 首页 > news >正文

QTableView-mode中嵌入复选框CheckBox

在这里插入图片描述

QTableView中嵌入复选框CheckBox
第二种方法:设置QAbstractTableModel的flags()函数法
通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck。这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate的实现方法,只需重写Model即可:

主要是修改两个函数:
//设置某一列为可选角色,绘画出QCheckBox
Qt::ItemFlags flags(const QModelIndex &index) const;
//根据界面选择QCheckbox,修改Model中的数据
bool setData(const QModelIndex &index, const QVariant &value, int role);

2.在StudentInfoModel .h头文件中的主要代码:   
class StudentInfoModel : public QAbstractTableModel    
{   Q_OBJECT   
public:   StudentInfoModel(const int totalColumn, const int aColumnNumWithChechBox = 0, QObject *parent = 0)   :totalColumn(totalColumn),colNumberWithCheckBox(aColumnNumWithChechBox),   QAbstractTableModel(parent) {rowCheckStateMap.clear();};   
public:   int rowCount(const QModelIndex &parent = QModelIndex()) const;   int columnCount(const QModelIndex &parent = QModelIndex()) const;   QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;   QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;   Qt::ItemFlags flags(const QModelIndex &index) const;   bool setData(const QModelIndex &index, const QVariant &value, int role);   public:   void AddStudentInfo(const StudentInfo &studentInfo);   signals:   void StudentInfoIsChecked(const StudentInfo &studentInfo);   private:   typedef QVector<StudentInfo> StudentInfos;   StudentInfos studentInfos;   int totalColumn;   int colNumberWithCheckBox;   QMap<int, Qt::CheckState> rowCheckStateMap;   
};   3.在StudentInfoModel.cpp文件中的主要代码如下:   
QVariant StudentInfoModel::data( const QModelIndex &index, int role ) const  
{   if (role == Qt::DisplayRole)    {    if (index.column() == 0)    return QString::number(index.row()+1);    if (index.column() == 1)    return studentInfos[index.row()].stuNumber;    if (index.column() == 2)   return studentInfos[index.row()].stuName;    if (index.column() == 3)   return studentInfos[index.row()].stuID;    if (index.column() == 4)   return studentInfos[index.row()].stuPhoneNumber;   if (index.column() == 5)    return studentInfos[index.row()].department;    if (index.column() == 6)    return studentInfos[index.row()].stuDescription;    }    if (role == Qt::CheckStateRole)    {    if (index.column() == colNumberWithCheckBox)    {    if (rowCheckStateMap.contains(index.row()))    return rowCheckStateMap[index.row()] == Qt::Checked ? Qt::Checked : Qt::Unchecked; return Qt::Unchecked;    }    }    return QVariant();   
}   Qt::ItemFlags StudentInfoModel::flags( const QModelIndex &index ) const  
{   if  (!index.isValid())   return 0;   if (index.column() == colNumberWithCheckBox)   return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;   return  Qt::ItemIsEnabled | Qt::ItemIsSelectable;   
}   bool StudentInfoModel::setData( const QModelIndex &index, const QVariant &value, int role )   
{   if(!index.isValid())   return false;   if (role == Qt::CheckStateRole && index.column() == colNumberWithCheckBox)   {   if (value == Qt::Checked) //   {   rowCheckStateMap[index.row()] = Qt::Checked;    if(studentInfos.size() > index.row())   emit StudentInfoIsChecked(studentInfos[index.row()]);   }   else  {   rowCheckStateMap[index.row()] = Qt::Unchecked;   }    }   return true;   
}  


http://www.mrgr.cn/news/47584.html

相关文章:

  • Node.js——fs(文件系统)模块
  • 51单片机 和 STM32 在硬件操作上的差异
  • 在高德地图上加载3DTilesLayer图层模型/天地瓦片
  • 【数据库】一、数据库系统概述
  • NVIDIA发布GeForce RTX 50 系列,售价549美元起
  • 【轻松学C:编程小白的大冒险】--- 选择 开发工具(IDE)Dev-c++ 03
  • 编程思想:编程范式:响应式编程
  • 快速解决urllib3.exceptions.MaxRetryError: HTTPSConnectionPool
  • Unity网络开发 - C#开源网络通信库PESocket的使用
  • 7.C++面向对象3(拷贝构造函数,赋值运算符重载)
  • Renesas R7FA8D1BH (Cortex®-M85) 上超声波测距模块(HC-SR04)驱动开发
  • Effective C++笔记之二十四:stack overflow
  • window.location.href和open的区别
  • QD1-P14 HTML常用标签:input输入标签
  • MySQL--事务(详解)
  • PGMP-00基础单词(1-25)
  • 数学基础 -- 三角函数极限之小数场景
  • 【.NET 8 实战--孢子记账--从单体到微服务】--角色(增加/删除/修改/查询)
  • React技术在Meta Connect 2024大会
  • LeetCode15.三数之和
  • 【cpp】 lambda 表达式常用笔记
  • ViT模型技术学习
  • 【部署篇】Redis-02单机部署
  • (27)QPSK信号在非相关平坦莱斯(Rician)衰落信道上的误码率性能MATLAB仿真
  • 点进HTML初步了解
  • JAVA开发中的常用通讯协议