QTableWidget中checkBox的高级应用实例

本文展示了如何在Qt的QTableWidget中使用QCheckBox,并实现当checkbox状态改变时,动态更新对应行的数据。通过信号与槽机制,实现了点击checkbox时显示或隐藏对应的行号。
摘要由CSDN通过智能技术生成

mainwindow.cpp

 

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "QDebug"

#include "QCheckBox"

 

 

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    connect(ui->tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(changeTest(int, int)));

}

 

MainWindow::~MainWindow()

{

    delete ui;

}

 

void MainWindow::changeEvent(QEvent *e)

{

    QMainWindow::changeEvent(e);

    switch (e->type()) {

    case QEvent::LanguageChange:

        ui->retranslateUi(this);

        break;

    default:

        break;

    }

}

void MainWindow::changeTest(int row, int col)

   {

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以通过以下步骤在QTableWidget添加复选框: 1. 创建QCheckBox对象 2. 将QCheckBox对象放入QTableWidgetItem 3. 将QTableWidgetItem添加到QTableWidget的指定单元格 示例代码: ```python # 创建QCheckBox对象 checkbox = QCheckBox() # 将QCheckBox对象放入QTableWidgetItem item = QTableWidgetItem() item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item.setCheckState(Qt.Unchecked) item.setData(Qt.CheckStateRole, QVariant(checkbox)) # 将QTableWidgetItem添加到QTableWidget的指定单元格 tableWidget.setItem(row, column, item) ``` 其,row和column分别表示要添加复选框的单元格的行和列。在上面的示例代码,复选框的初始状态为未选。如果需要设置复选框的初始状态为选,可以将`Qt.Unchecked`改为`Qt.Checked`。 ### 回答2: QTableWidgetQt常用的表格控件之一,可用于显示和编辑二维表格数据。如需在QTableWidget添加Checkbox,可通过以下步骤进行: 1. 在QTableWidget新建一个列,用于显示Checkbox。可以使用如下代码: ```python table.setColumnCount(table.columnCount()+1) # 新增一列 for i in range(table.rowCount()): item = QTableWidgetItem() # 新建一个 QTableWidgetItem item.setFlags(QtCore.Qt.ItemIsUserCheckable|QtCore.Qt.ItemIsEnabled) # 设置该单元格为可选状态 item.setCheckState(QtCore.Qt.Unchecked) # 设置该单元格复选框为未选状态 table.setItem(i, table.columnCount()-1, item) # 将该QTableWidgetItem设置到指定行和列 ``` 2. 给Checkbox添加响应函数。可以使用如下代码: ```python def on_checkbox_stateChanged(item): if item.checkState() == QtCore.Qt.Checked: print('checkbox is checked') else: print('checkbox is unchecked') table.cellChanged.connect(on_checkbox_stateChanged) ``` 以上代码将在单元格checkbox发生状态改变事件时调用响应函数on_checkbox_stateChanged()。 3. 获取Checkbox状态。可以使用如下代码: ```python checkbox = table.item(row, column) if checkbox.checkState() == QtCore.Qt.Checked: print('checkbox is checked') else: print('checkbox is unchecked') ``` 以上代码将获取指定行和列对应的单元格checkbox状态。 通过以上步骤,我们就可以在QTableWidget添加Checkbox,并对其进行响应和获取。当然,在实际应用,我们还可以根据需要进行更进一步的修改和扩展,以满足具体业务需求。 ### 回答3: 在QtQTableWidget是一个非常实用的控件,可以用于显示和编辑表格数据。在某些场景下,我们希望在表格添加复选框来实现多选。这时候,我们需要对QTableWidget进行一定的定制化操作,才能实现添加复选框的功能。下面我将介绍如何在QTableWidget添加checkbox,并取得选的值: 1. 存储checkbox对象 首先,我们需要存储每个checkbox对象,以便在后续的操作进行访问。我们可以使用QMap来存储这些对象,具体代码如下: QMap<QString, QCheckBox*> checkBoxMap; 2. 实现QTableWidgetDelegate 为了显示QTableWidget的复选框,我们需要实现QTableWidgetDelegate,重写createEditor方法,将其返回QCheckBox实例。具体代码如下: class TableItemDelegate : public QItemDelegate{ public: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override{ if(index.column() == 0){ auto checkBox = new QCheckBox(parent); return checkBox; }else{ return QItemDelegate::createEditor(parent, option, index); } } }; 3. 注册delegete对象 接下来,我们需要将实现的TableItemDelegate对象注册到QTableWidget,以便能够正确的生成复选框。我们可以在初始化方法进行注册。具体代码如下: tableView->setItemDelegate(new TableItemDelegate); 4. 存储checkbox状态 为了记录每个checkbox的状态,我们可以使用QTableWidget::itemChanged信号。当有项目的状态被改变时,我们遍历整个表格,将每个checkbox的当前状态存储到checkBoxMap。具体代码如下: connect(tableView, &QTableWidget::itemChanged, [=](QTableWidgetItem* item){ if(item->column() == 0){ checkBoxMap[item->text()]->setChecked(item->checkState() == Qt::Checked ? true : false); } }); 5. 获取checkbox状态 我们可以使用checkBoxMap存储的checkbox实例,获取当前选状态。具体代码如下: auto checkBox = checkBoxMap[rowName]; bool isChecked = checkBox->isChecked(); 最后,通过上述步骤,我们就可以在QTableWidget添加复选框,以便实现多选。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值