QTableWidget设置只让某一列可编辑的实现

 更新时间:2023年08月29日 14:55:14   作者:怪我冷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某一列可编辑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言数据结构之串插入操作

    C语言数据结构之串插入操作

    这篇文章主要介绍了C语言数据结构之串插入操作的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C++类模板以及保存数据到文件方式

    C++类模板以及保存数据到文件方式

    这篇文章主要介绍了C++类模板以及保存数据到文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C语言实现简单的三子棋游戏源码

    C语言实现简单的三子棋游戏源码

    这篇文章主要为大家详细介绍了C语言实现简单的三子棋游戏源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • gdb调试命令的使用及总结

    gdb调试命令的使用及总结

    gdb是一个在UNIX环境下的命令行调试工具。如果需要使用gdb调试程序,请在gcc时加上-g选项。下面的命令部分是简化版,比如使用l代替list等等
    2013-05-05
  • C语言指针教程示例详解

    C语言指针教程示例详解

    这篇文章主要为大家介绍了C语言指针教程的示例详解
    2022-02-02
  • 基于OpenCV实现车道线检测(自动驾驶 机器视觉)

    基于OpenCV实现车道线检测(自动驾驶 机器视觉)

    无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,本文将为大家介绍无人驾驶技术中的车道线检测,感兴趣的小伙伴可以了解一下
    2021-11-11
  • C语言中查询进程信号是否被遮罩或搁置的简单方法

    C语言中查询进程信号是否被遮罩或搁置的简单方法

    这篇文章主要介绍了C语言中查询进程信号是否被遮罩或搁置的简单方法,包括sigprocmask函数和sigpending函数的简介,需要的朋友可以参考下
    2015-09-09
  • C语言数据结构之顺序数组的实现

    C语言数据结构之顺序数组的实现

    这篇文章主要介绍了C语言数据结构之顺序数组的实现的相关资料,这里提供实现实例,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • C语言的字符函数和字符串函数详解

    C语言的字符函数和字符串函数详解

    这篇文章主要为大家详细介绍了C语言的字符函数和字符串函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 解决C语言输入单个字符屏蔽回车符的问题

    解决C语言输入单个字符屏蔽回车符的问题

    这篇文章主要介绍了解决C语言输入单个字符屏蔽回车符的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论