QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制
Posted
技术标签:
【中文标题】QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制【英文标题】:QStyledItemDelegate and QStandardItem preventing change text , enable only select and copy 【发布时间】:2012-11-28 09:19:33 【问题描述】:我有一个简单的 QStandardItem 和 QTableView 和 QStyledItemDelegate。他们有代表,我想禁止用户更改表中列的内容,只允许选择和复制。我猜它与QStyledItemDelegate::createEditor
有关。
当我将它设置为返回 0 时,它只是禁用一切。
QWidget *InfoTableItemDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
// return QStyledItemDelegate::createEditor(parent, option, index);
return 0;
我的问题是,我如何定义它,所以我只能选择和复制,并禁用编辑它的选项,如删除或更改文本
【问题讨论】:
1) 别忘了写下你的问题... 2) 什么是“禁用一切”? 3) 此处返回 0 应该没问题,它不会创建编辑器小部件,因此您无法编辑模型。 谢谢,我只希望能够选择和复制文本,但当我使用返回 0 执行此操作时不能编辑(删除或更改),我无法选择和复制它跨度> 【参考方案1】:如果您的数据可以显示为简单的文本,那么您可以在read-only mode 中返回一个 QLineEdit。如果您有图像或其他类型的数据,可能是带有一些 html 的可选 QLabel(要使 QLabel 可选,您必须在label's interaction flags 中包含Qt::TextSelectableByMouse
或Qt::TextSelectableByKeyboard
)。
【讨论】:
1/ 这不是一个很有建设性的评论。 2/ 为什么你认为这不是一个好方法? 3/不能直接选择,Qt中没有实现。另一种方法是编写一个代理来跟踪鼠标并相应地绘制小部件,我认为这是更多的工作。 抱歉评论。但我想现在如果我对表使用委托,我可以通过设置标志来做到这一点以上是关于QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制的主要内容,如果未能解决你的问题,请参考以下文章
QTableView 和 QStyledItemDelegate 类的使用 (PyQt5)
QListView 与 CustomWIdget 使用 QStyledItemDelegate
QStyledItemDelegate 在 QTableView 中显示 QComboBox
无法在 QStyledItemDelegate 中绘制复选框