我的主窗口类中有一个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()方法,存储旧值,等等。

10-07 13:06