我的主窗口类中有一个QTableWidget。
我找不到可以撤消指定单元格文本更改的功能。
我想做的是:
void myCellUndoFunc(int row, int col)
{
table->item(row, col)->undo(); //table is my QTableWidget
}
问题是没有这样的undo()。
所以我的问题是,使用信号和插槽的某些foo-doo组合是否可以解决此问题?
谢谢!
PS:请不要建议使用Model / View框架,因为我在应用程序中广泛使用了QTableWidget。对不起,同样。
最佳答案
也许您应该使用
void QTableWidgetItem::setData ( int role, const QVariant & value ) [virtual]
使用Qt :: UserRole您可以指定最后一个值。在您的方法中,您可以使用data()-Method访问先前设置的值。您唯一要做的就是始终保持旧值最新。
在设置QTableWidgetItem的新值之前
tw->setData(Qt::UserRole, tw->text())
并且在撤消时,您可以使用
tw->setText(tw->data(Qt::UserRole).toString())
其中“ tw”是使用contextmenu-event,clicked-event或您想要的任何内容的当前QTableWidgetItem。您还可以将QTableWidgetItem子类化,并在您的类中内部处理整个事情,创建undo()方法,存储旧值,等等。