QTableWidget设置只让某一列可编辑的实现
作者:怪我冷i
本文介绍了如何将QTableWidget的某一列设置为可编辑,以便用户可以输入自定义数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在QTableWidget中如何设置只让某一列可编辑
可以通过QTableWidget的setItem()方法以及Qt的ItemFlags枚举来设置QTableWidgetItem的属性,从而实现只让某一列可编辑的功能。
具体步骤如下:
- 遍历QTableWidget的所有行,对于每一行的某一列设置相应的ItemFlags属性。
- ItemFlags属性是一个位掩码枚举,可以包含多个选项,其中包括Qt::ItemIsEditable,表示该项可编辑,Qt::ItemIsSelectable,表示该项可选择,Qt::ItemIsEnabled,表示该项可用。我们只需要设置Qt::ItemIsEditable选项即可。
- 通过QTableWidgetItem的setFlags()方法设置该表格项的属性。
以下是示例代码1:
# 仅让第二列可编辑 for i in range(tableWidget.rowCount()): item = tableWidget.item(i, 1) if item is not None: item.setFlags(item.flags() | Qt.ItemIsEditable)
以下是示例代码2:
//设置全部可编辑 tableWidget->setEditTriggers(QAbstractItemView::CurrentChanged); //再一列列禁编辑 Utils::setEditTriggersForColumn(tableWidget,5,0); //Utils::setEditTriggersForColumn(tableWidget,5,1); Utils::setEditTriggersForColumn(tableWidget,5,2);
其中setEditTriggersForColumn方法如下
void Utils::setEditTriggersForColumn(QTableWidget *tableWidget, int rowCount, int column) { for(int i=0;i<rowCount;i++){ QTableWidgetItem *item = tableWidget->item(i,column); item->setFlags(item->flags() & ~Qt::ItemIsEditable); } }
其中,tableWidget是一个QTableWidget对象,通过调用它的rowCount()方法和item()方法来遍历表格的所有行和列,从而获取每个表格项,并设置相应的属性。
QTableView中如何设置只让某一列可编辑
如果是QTableView,类似的,可设置全部可编辑,再设置禁止其他几列。
tableView->setEditTriggers(QAbstractItemView::CurrentChanged);//编辑模式 QStandardItem *item0 = new QStandardItem("第一列"); item0->setEnabled(false); m_model->setItem(0, 0, item0);
设置代理的方式
单元格较多时,QTableView还可以设置代理的方式实现
tableWidget->setEditTriggers(QAbstractItemView::CurrentChanged); QWidget* ReadOnlyItemDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const { return nullptr; } //限制某行某列不可编辑 ui->tableView->setItemDelegateForRow(row, new ReadOnlyItemDelegate()); ui->tableView->setItemDelegateForColumn(column, new ReadOnlyItemDelegate()); ui->tableWidget->setItemDelegateForRow(row, new ReadOnlyItemDelegate()); ui->tableWidget->setItemDelegateForColumn(column, new ReadOnlyItemDelegate());
参考
QTableWidget、QTableView单元格设置不可编辑的几种方法及使用场景
到此这篇关于QTableWidget设置只让某一列可编辑的实现的文章就介绍到这了,更多相关QTableWidget某一列可编辑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!