具有自动恢复旧单元格值的 QTableWidget

Posted

技术标签:

【中文标题】具有自动恢复旧单元格值的 QTableWidget【英文标题】:QTableWidget with automatic restore of old cell value 【发布时间】:2016-01-12 19:53:11 【问题描述】:

我刚刚开始使用 QT,所以请耐心等待... 我有一个可编辑的 QTableWidget(实际上是一个子类),并且需要实现以下行为。 当用户键入不可接受的值时,我想: 1)恢复原值; 2) 将焦点保持在单元格中并将其设置为编辑模式。

我目前正在使用 itemChanged SIGNAL,以及 QTableWidgetItem 的子类。 哪一种是获得我需要的东西的最佳方式? 非常欢迎任何提示、建议或参考。

如果您认为它有用,我可以发布一些代码。

Ciao 阿尔夫。

【问题讨论】:

How to use a validator with QTableWidgetItem?的可能重复 【参考方案1】:

我目前正在使用 itemChanged SIGNAL...

你应该继承QStyledItemDelegate

class CustomTableDelegate : public QStyledItemDelegate

    Q_OBJECT

    public:
        CustomTableDelegate (QObject * parent = 0);
        QWidget * createEditor (QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const;
        bool editorEvent (QEvent *, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &);
        void setEditorData (QWidget *, const QModelIndex &) const;
        void setModelData  (QWidget *, QAbstractItemModel *, const QModelIndex &) const;
;

并在setModelData 内部实现验证。

要使用自定义委托,您需要为 QTableWidget 设置它:

table->setItemDelegate (new CustomTableDelegate () );

【讨论】:

我可以使用 setItemDelegateForColumn 对单个列执行此操作吗? 不,你不能。要检查特定列的值,您应该检查 setModelData 内的列号,例如:switch (index.column () ) \\do stuff... 好的。我会去做的。谢谢和Ciao

以上是关于具有自动恢复旧单元格值的 QTableWidget的主要内容,如果未能解决你的问题,请参考以下文章

用给定行的所有单元格值填充字典

基于单元格值的 DataGrid 行背景

创建具有多个像素或单元格值的数组

从具有修改的 HeaderText 的列中解析单元格值

将单元格颜色从工作表复制到具有相同单元格值的工作表

如何保存编辑的 PyQt5 TableWidget 单元格?