如果用户编辑QTableWidgetItem
并通过按ESC
中止它,我该如何捕获?我通过捕捉QTableWidget::cellDoubleClicked
处理相应项目的内容,我知道什么时候通过听QTableWidget::cellChanged
改变了一些东西。但是当用户按下ESC
时,我不知道。
我试图在QTableWidget
上安装一个事件过滤器,但它只捕获了widget自身接收的按键 - 编辑器似乎是另一回事。
任何帮助将不胜感激!
您必须使用委托并使用您的eventFilter,以下代码是一个示例:
#include <QApplication>
#include <QKeyEvent>
#include <QStyledItemDelegate>
#include <QTableWidget>
#include <QDebug>
class TableWidgetDelegate: public QStyledItemDelegate{
public:
using QStyledItemDelegate::QStyledItemDelegate;
protected:
bool eventFilter(QObject * object, QEvent * event){
QWidget *editor = qobject_cast<QWidget*>(object);
if(editor && event->type() == QEvent::KeyPress) {
if(static_cast<QKeyEvent *>(event)->key() == Qt::Key_Escape){
qDebug()<<"escape";
}
}
return QStyledItemDelegate::eventFilter(editor, event);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableWidget w(6, 4);
w.setItemDelegate(new TableWidgetDelegate);
w.show();
return a.exec();
}