如果用户编辑QTableWidgetItem
并通过按ESC
中止该操作,我该如何捕获?我通过捕捉QTableWidget::cellDoubleClicked
来处理相应项目的内容,并且通过收听QTableWidget::cellChanged
我知道什么时候发生了变化。但是当用户按下ESC
时,我不知道。
我尝试在QTableWidget
上安装一个事件过滤器,但它只捕获了窗口小部件自己接收的按键 - 编辑器似乎是另一回事。
非常感谢任何帮助!
答案 0 :(得分:1)
您必须使用委托并使用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();
}