下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、QTableWidget中checkBox状态判断在QTableWidget表格中显示一个QCheckBox:一:最先想到的是void QTableWidget:setCellWidget(int row, int column, QWidget *widget),事实证明使用这个函数正常显示CheckBox没有问题,但是却无法通过QTableWidget对象去读取这个CheckBox的状态。情况如下:1.从QTableWidget取得Item的指针的函数只有:QTableItem*item(int row, int column) const。注意这个函数返回的是QTableItem *,而
2、不是你所设定的对象类型。那就强制类型转换。2.(QCheckBox *). 事实证明Qt是不支持这种转换的。注意:(QTableWidgetItem *)可强制转换为(QLabel *)。因此在表格中如果想做出单选框的状态,不要用QCheckBox嵌入里面,这样会出现许多未知的bug。二:QTableWidgetItem这个对象有CheckState属性,既能显示QCheckBox,又能读取状态。QTableWidget *tableWidget = new QTableWidget;QTableWidgetItem *checkBox = new QTableWidgetItem();che
3、ckBox-setCheckState(Qt:Checked);tableWidget -setItem(2, 2, checkBox);以上代码就在tablewidget中显示一个QCheckBox。但是如何判断复选框是否被选中呢,方法是利用QTableWidget:cellChanged()函数,检查单元格内容的变化,然后连接此信号,在槽函数中检测checkBox的状态。connect(tableWidget, SIGNAL(cellChanged(int,int), this, SLOT(changeTest(int, int);void changeTest(int row, int
4、col)if(tableWidget -item(row, col)-checkState() = Qt:Checked) /选中.else.Qt中QTableView中加入Check列实现QTableViewQCheckBox列复选框QTableView中嵌入复选框CheckBox 第二种方法:设置QAbstractTableModel的flags()函数法 通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck。这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate的实现方法,只需重写Model即可:
5、主要是修改两个函数:/设置某一列为可选角色,绘画出QCheckBoxQt: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_OBJECTpublic: StudentInfoMode
6、l(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(cons
7、t 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 &in
8、dex, const QVariant &value, int role);public: void AddStudentInfo(const StudentInfo &studentInfo); signals: void StudentInfoIsChecked(const StudentInfo &studentInfo);private: typedef QVector StudentInfos; StudentInfos studentInfos; int totalColumn; int colNumberWithCheckBox; QMap rowCheckStateMap;3.
9、在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 studentInfosindex.row().stuNumber; if (index.column() = 2)return studentI
10、nfosindex.row().stuName; if (index.column() = 3)return studentInfosindex.row().stuID; if (index.column() = 4)return studentInfosindex.row().stuPhoneNumber;if (index.column() = 5) return studentInfosindex.row().department; if (index.column() = 6) return studentInfosindex.row().stuDescription; if (rol
11、e = Qt:CheckStateRole) if (index.column() = colNumberWithCheckBox) if (rowCheckStateMap.contains(index.row() return rowCheckStateMapindex.row() = Qt:Checked ? Qt:Checked : Qt:Unchecked; return Qt:Unchecked; return QVariant();Qt:ItemFlags StudentInfoModel:flags( const QModelIndex &index ) const if (!
12、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()re
13、turn false; if (role = Qt:CheckStateRole & index.column() = colNumberWithCheckBox) if (value = Qt:Checked) / rowCheckStateMapindex.row() = Qt:Checked; if(studentInfos.size() index.row() emit StudentInfoIsChecked(studentInfosindex.row(); else rowCheckStateMapindex.row() = Qt:Unchecked; return true;在Q
14、TableWidget中添加QCheckBox并使其居中显示(转) 实现思路:把QCheckBox嵌入式到一个水平布局中QWidget*widget;QHBoxLayout*hLayout;QCheckBox*ckb;.ckb=newQCheckBox();hLayout=newQHBoxLayout();widget=newQWidget(ui-tableWidget);hLayout-addWidget(ckb);hLayout-setMargin(0);/必须添加,否则CheckBox不能正常显示hLayout-setAlignment(ckb,Qt:AlignCenter);widge
15、t-setLayout(hLayout);.ui-tableWidget-setCellWidget(row,column,widget);获取CheckBox的指针的方法QWidget*widget=(QWidget*)ui-tableWidget-cellWidget(row,column);QCheckBox*ckb=(QCheckBox*)widget-children().at(1);ckb-setChecked(true);.备注: 可使用 qDebug() children(); 输出widget的child列表从而判断CheckBox的index /开关按钮 QWidget* widget = new QWidget(); QToolButton* switchBtn = new QToolButton(widget); switchBtn-setFixedSize(QSize(nWidth, nHeight); switchBtn-setText(关); switchBtn-setStyleSheet(offStyle); QHBoxLayout* hLayout = new QHBoxLayout(widget); hLayout-setMargin(0); hLayout-addWidget(switchBtn); hLayout-setAlignm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 万科消杀外包合同
- 专项外包合同
- 中冶集团外包合同
- 中铁搅拌站外包合同
- 互联网销售外包合同
- 人力服务外包合同
- 佰钧成外包合同
- 供热公司外包合同
- 入职签外包合同
- 公司机动车外包合同
- QC/T 947-2025汽车自动防眩目视镜
- 带状疱疹疫苗科普
- 走进人工智能-AI发展史及人工智能的应用
- 2026届苏锡常镇高三语文一模作文评分细则及标杆文:卓越源于有目的、有反馈的重复
- 22019+02306+05404+统计学原理或者叫统计与数据分析基础-国家开发大学期末考试题复习
- 2025年陕西供销集团有限公司社会招聘(8人)笔试参考题库附带答案详解(3卷合一版)
- 企业工商登记课件
- 优生优育学课件
- 室温下湿气快速固化聚硅氮烷的制备及其涂层性能研究
- 2025年蚌埠辅警招聘考试真题及一套完整答案详解
- 维修沟通技巧培训课件
评论
0/150
提交评论