0

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

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

问题是没有这样的undo()。所以我的问题是,是否可以使用 SIGNAL 和 SLOT 的一些 foo-doo 组合来解决这个问题?

谢谢!

PS:请不要建议使用模型/视图框架,因为我在我的应用程序中广泛使用了 QTableWidget。对不起,同样。

4

1 回答 1

1

也许你应该使用

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() 方法,存储旧值等。

于 2013-07-11T15:20:27.980 回答