在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());