撤消Qt中QTableWidget的单个单元格

Undo for individual cells of QTableWidget in Qt?

本文关键字:单个 单元格 QTableWidget Qt 撤消      更新时间:2023-10-16

我的主窗口类中有一个QTableWidget。我找不到可以撤消指定单元格的文本更改的功能。我想做的是:

    void myCellUndoFunc(int row, int col)
    {
        table->item(row, col)->undo(); //table is my QTableWidget
    }

问题是没有这样的undo()。所以我的问题是,是否可以使用SIGNAL的&SLOT?

谢谢!

附言:请不要建议使用模型/视图框架,因为我在应用程序中广泛使用了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事件、单击的事件或您想要的任何内容的当前QTableWidgetItem。您还可以对QTableWidgetItem进行子类化,并在类中内部处理这整件事,创建一个undo()方法,存储旧值等。