推送标题部分项目后如何防止单元格编辑?

Posted

技术标签:

【中文标题】推送标题部分项目后如何防止单元格编辑?【英文标题】:How to prevent cell editing after pushing header section item? 【发布时间】:2016-10-01 00:21:57 【问题描述】:

当我按下QTableWidget 中的水平标题部分项目时,此列中的上部单元格就可以进行编辑了。 如何预防?

【问题讨论】:

默认情况下,当单击列的标题时,会选择整个列。也许这与您在QTableWidget 上设置的代码/属性有关。请在 QTableWidget 和/或相关代码部分(最好在 MCVE 中)提供您更改的所有属性。 如果你想让我们帮助你,你必须提供一个minimal reproducible example,如果你不帮我做这个问题应该关闭,因为它属于离题:问题寻求调试帮助(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。 您在寻找什么样的行为?单击标题时是否应该选择一列?选择单元格时是否应该自动开始编辑?请在您的问题中包含所有相关信息(作为文本),而不是添加屏幕截图。 【参考方案1】:

问题与干扰有关

单击列标题时选择一列并 选择项目后立即开始编辑 (editTriggers > CurrentChanged)

因此,基本上,您应该禁用一种或两种行为。

要在单击标题时禁用选择列,您可以查看问题Disable selecting row or column by clicking the header in QTableWidget,其中包含许多替代解决方案。 或者不要立即通过禁用CurrentChanged开始编辑。

【讨论】:

disconnect(horizontalHeader(), SIGNAL(sectionPressed(int)),this, SLOT(selectColumn(int))); 为我工作。【参考方案2】:

查看QTableWidget 文档,我找到了解决问题的方法。您必须编辑每个 vertical header item 并修改它们的 flags 使其不可编辑。

const int size = ui->tableWidget->columnCount();
for (int i=0; i<size; i++) 
     QTableWidgetItem * item = ui->tableWidget->verticalHeaderItem(i);
     item->setFlags(...every single flag you want);

您在此link 中有可用标志的列表。

【讨论】:

它对我来说工作正常:QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable); 已更新。 - - - -

以上是关于推送标题部分项目后如何防止单元格编辑?的主要内容,如果未能解决你的问题,请参考以下文章

防止在外部单击时以弹出模式关闭单元格编辑器

如何防止ag-grid内联单元格编辑自动修改行数据

当我输入保存时,防止在单元格编辑时进行两次保存调用[关闭]

如何使excel中的单元格不可编辑

数据输入后锁定单元格

在 QTableView 中编辑单元格后使用 TAB 键前进时如何避免编辑模式?