2012-11-28 19 views
1

我有一个简单的QStandardItem和QTableView和QStyledItemDelegate。他们有代表,我想禁用用户更改表中列的内容的可能性,并且只允许选择和复制。我想它与QStyledItemDelegate::createEditor有关。QStyledItemDelegate和QStandardItem防止更改文本,只启用选择和复制

当我设置它返回0,它只是禁用一切。

QWidget *InfoTableItemDelegate::createEditor(QWidget *parent, 
            const QStyleOptionViewItem &option, 
            const QModelIndex &index) const 
{ 
    // return QStyledItemDelegate::createEditor(parent, option, index); 
    return 0; 
} 

我的问题是,我该怎么定义它,所以我只能选择和复制,并禁用选项来编辑它像删除或更改文本

+0

1)别忘了写下你的问题...... 2)什么是“禁用一切”? 3)在这里返回0应该没问题,它不会创建编辑器小部件,因此您无法编辑模型。 – Synxis

+0

谢谢,我希望能够选择和复制文本,但不能编辑它(删除或更改)当我这样做与返回0,我不能选择和复制它 – user63898

回答

1

如果您的数据可以显示简单的文本,那么你可以返回一个QLineEdit read-only mode。如果您有图像或其他类型的数据,可能是一个带有一些html的可选QLabel(为了使QLabel可选,您必须在label's interaction flags中包含Qt::TextSelectableByMouseQt::TextSelectableByKeyboard)。

+0

1 /这不是一个非常有建设性的评论。 2 /为什么你认为这不是一个好办法? 3 /你不能直接选择,它不会在Qt中实现。另一种方法是编写一个跟踪鼠标并相应地绘制小部件的委托,这是我认为的更多工作。 – Synxis

+0

抱歉的评论。但我想现在如果我使用委托的表我可以做它与设置标志 – user63898