qt 设计器 QTableWidget 的某些列可编辑

Posted

技术标签:

【中文标题】qt 设计器 QTableWidget 的某些列可编辑【英文标题】:qt designer certain columns of a QTableWidget editable 【发布时间】:2021-09-15 11:38:06 【问题描述】:

我有一个用 Qt Designer 创建的 QTableWidget,想知道是否可以 使某些列可编辑,而其他列不可在 Qt 设计器中编辑。我在 python 中看到了解决方案 或 c++ 但我想知道在 qt 设计器中是否有可能。

【问题讨论】:

【参考方案1】:

您将无法使用 Qt Designer 执行此操作,因为您最多可以使 QtDesigner 创建的项目不可编辑(默认情况下这些项目是可编辑的),而不是代码创建的新行或新列。因此,正如我在this post 中指出的那样,最简单和最实用的解决方案是通过代码使用委托来完成:

class ReadOnlyDelegate(QtWidgets.QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editable_columns = (1, 3, 4)
        if index.column() in editable_columns:
            return super().createEditor(parent, option, index)
delegate = ReadOnlyDelegate(self.qtable_widget)
self.tableWidget.setItemDelegate(delegate)

【讨论】:

【参考方案2】:

对于整个专栏,我不这么认为。列的属性中未提供任何标志。如果您的表不是太大,您可以像这样单独编辑项目:

在设计器中,右键单击QTAbleWidget,然后单击Edit Items...。然后,切换到Items 标签。

从那里,单击任何项​​目,然后打开 Properties << 选项卡。在那里,您应该找到一个复选框,说明该特定项目是否可编辑。

【讨论】:

感谢您的回答。 Unf 那行不通。我希望用户能够输入产品 ID,然后自动填充该行的其余部分,例如描述、价格等。该行中的其他字段不应该是可编辑的。

以上是关于qt 设计器 QTableWidget 的某些列可编辑的主要内容,如果未能解决你的问题,请参考以下文章

QTableView / QTableWidget:使用 Qt 设计器拉伸最后一列

Qt C++ 在表之间拖动 QHeaderView

QTableWidget 信号和槽移动字段

Qt与Qtablewidget中headeritem的Python大小

Qt下QTableWidget的使用

QT QTableWidget 未出现在 QTabWidget 中