推送标题部分项目后如何防止单元格编辑?
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); 已更新。 - - - -以上是关于推送标题部分项目后如何防止单元格编辑?的主要内容,如果未能解决你的问题,请参考以下文章