天天看点

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

 大家都知道,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));
           

继续阅读