具有自动恢复旧单元格值的 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的主要内容,如果未能解决你的问题,请参考以下文章