在QTableWidget中如何设置只让某一列可编辑

在QTableWidget中如何设置只让某一列可编辑

可以通过QTableWidget的setItem()方法以及Qt的ItemFlags枚举来设置QTableWidgetItem的属性,从而实现只让某一列可编辑的功能。

具体步骤如下:

  1. 遍历QTableWidget的所有行,对于每一行的某一列设置相应的ItemFlags属性。
  2. ItemFlags属性是一个位掩码枚举,可以包含多个选项,其中包括Qt::ItemIsEditable,表示该项可编辑,Qt::ItemIsSelectable,表示该项可选择,Qt::ItemIsEnabled,表示该项可用。我们只需要设置Qt::ItemIsEditable选项即可。
  3. 通过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单元格设置不可编辑的几种方法及使用场景
INSCODE AI 创作助手

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用`QTableWidgetItem`类的`setFlags()`方法来设置QTableWidget某个单元格是否可以编辑。在这个方法,您可以使用`Qt.ItemIsEditable`标志来设置单元格的可编辑性。以下是一个设置第一行第二列可编辑的示例代码: ```python from PyQt5.QtWidgets import QMainWindow, QApplication, QTableWidget, QTableWidgetItem from PyQt5.QtCore import Qt class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.tableWidget = QTableWidget(self) self.tableWidget.setRowCount(3) self.tableWidget.setColumnCount(2) # 添加数据 self.tableWidget.setItem(0, 0, QTableWidgetItem("A")) self.tableWidget.setItem(0, 1, QTableWidgetItem("B")) self.tableWidget.setItem(1, 0, QTableWidgetItem("C")) self.tableWidget.setItem(1, 1, QTableWidgetItem("D")) self.tableWidget.setItem(2, 0, QTableWidgetItem("E")) self.tableWidget.setItem(2, 1, QTableWidgetItem("F")) # 设置第一行第二列可编辑 item = self.tableWidget.item(0, 1) item.setFlags(item.flags() | Qt.ItemIsEditable) self.setCentralWidget(self.tableWidget) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在上面的代码,我们首先创建了一个QTableWidget,并设置了行数和列数。然后使用`setItem()`方法添加数据。 接下来,我们获取第一行第二列的单元格,并使用`setFlags()`方法设置其可编辑性。在这里,我们使用了`Qt.ItemIsEditable`标志。 最后,我们将QTableWidget设置为主窗口的心部件,并显示应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值