在Qt中撤消QTableWidget的单个单元格?

时间:2013-07-11 14:49:41

标签: c++ qt

我的Main Window类中有一个QTableWidget。 我无法找到将撤消指定单元格的文本更改的功能。 我想做的是:

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

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

谢谢!

PS:请不要建议使用Model / View框架,因为我在我的应用程序中广泛使用了QTableWidget。抱歉也是这样。

1 个答案:

答案 0 :(得分:1)

也许你应该使用

void QTableWidgetItem::setData ( int role, const QVariant & value ) [virtual]

使用 Qt :: UserRole ,您可以指定最后一个值。在您的方法中,您可以使用data() - Method访问先前设置的值。您唯一需要做的就是始终保持旧值最新。

在设置QTableWidgetItem的新值之前

tw->setData(Qt::UserRole, tw->text())

并且撤消u可以使用

检索数据

tw->setText(tw->data(Qt::UserRole).toString())

其中“tw”是使用contextmenu-event,clicked-event或你想要的任何内容的当前QTableWidgetItem。你也可以继承QTableWidgetItem并在你的类内部处理这整个事情,创建一个undo()方法,存储旧值等等。