QT中设置QTreeWidget某一列不可编辑

3 篇文章 0 订阅

 大家都知道,QTreeWidget每行是通过QTreeWidgetItem来描述的,也就是说如果对Item单独设置属性的话,使得某一行可以编辑或者不可编辑:

QTreeWidgetItem* item = new QTreeWidgetItem(ui.treeWidget);

/// 设置某一行的内容可编辑
item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable); 

有时候我们想要用QTreeWidget给用户提供Key-Value的设置界面,要禁止第一列参数名称(key)编辑功能,而Qt没有直接提供列设置功能,而QTreeWidget(还包括其他数据控件,如表格、列表等,简称MV-D)创建编辑器和显示功能是由Delegate提供的。

所以我们可以从Delegate入手,禁用某列编辑功能。

class DisableEditor : public QStyledItemDelegate
{
public:
	DisableEditor(QObject* parent) 
	: QStyledItemDelegate(parent) {}

	virtual QWidget * createEditor(QWidget *parent,	const QStyleOptionViewItem &option,
		const QModelIndex &index) const override
	{
		return 0;
	}
};


/// 设置第一列不可编辑
ui.treeWidget->setItemDelegateForColumn(0, new DisableEditor(
ui.treeWidget));

 

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 QTreeWidgetItem 进行树形控件的开发时,你可以通过设置特定列的 Qt.ItemIsSelectable 属性为 False 来使其不可。以下是一个示例代码: ```python # 导入必要的模块 from PyQt5.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem, QWidget # 创建应用程序和窗口 app = QApplication([]) window = QWidget() # 创建树形控件 tree = QTreeWidget(window) tree.setColumnCount(3) # 创建根节点 root = QTreeWidgetItem(tree) root.setText(0, "Root") # 创建子节点并设置特定列的 ItemIsSelectable 属性为 False child1 = QTreeWidgetItem(root) child1.setText(0, "Child 1") child1.setText(1, "Selectable") child1.setText(2, "Selectable") child1.setFlags(child1.flags() & ~Qt.ItemIsSelectable) # 第二列不可 child2 = QTreeWidgetItem(root) child2.setText(0, "Child 2") child2.setText(1, "Selectable") child2.setText(2, "Selectable") child2.setFlags(child2.flags() & ~Qt.ItemIsSelectable) # 第二列不可 # 将树形控件添加到窗口并显示 window.setCentralWidget(tree) window.show() app.exec() ``` 在上述示例,我们创建了一个树形控件,并且设置了三个列。然后,我们创建了一个根节点和两个子节点,并在第二列和第三列上设置了文本。接着,使用 `setFlags()` 方法,我们将子节点的第二列的 `ItemIsSelectable` 属性设置为 False,从而使其不可。 你可以根据需要修改示例代码的列数、节点数量和属性设置。希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值