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::TextSelectableByMouseQt::TextSelectableByKeyboard)。

【讨论】:

1/ 这不是一个很有建设性的评论。 2/ 为什么你认为这不是一个好方法? 3/不能直接选择,Qt中没有实现。另一种方法是编写一个代理来跟踪鼠标并相应地绘制小部件,我认为这是更多的工作。 抱歉评论。但我想现在如果我对表使用委托,我可以通过设置标志来做到这一点

以上是关于QStyledItemDelegate 和 QStandardItem 防止更改文本,仅启用选择和复制的主要内容,如果未能解决你的问题,请参考以下文章

QTableView 和 QStyledItemDelegate 类的使用 (PyQt5)

QListView 与 CustomWIdget 使用 QStyledItemDelegate

QStyledItemDelegate 在 QTableView 中显示 QComboBox

无法在 QStyledItemDelegate 中绘制复选框

Qt入门教程数据模型篇QStyledItemDelegate样式代理类

Qt入门教程数据模型篇QStyledItemDelegate样式代理类