编辑 QTableWidgetItem 时捕获 ESC 键
Catching an ESC press when editing a QTableWidgetItem
如果用户编辑 QTableWidgetItem
并通过按 ESC
中止它,我如何捕捉?我通过捕获 QTableWidget::cellDoubleClicked
来处理相应项目的内容,并且我通过监听 QTableWidget::cellChanged
知道什么时候发生了变化。但是当用户按下ESC
时,我却不知道
我试图在 QTableWidget
上安装一个事件过滤器,但它只捕获小部件本身接收到的按键——编辑器似乎是另一回事。
如有任何帮助,我们将不胜感激!
你必须使用委托并使用你的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();
}
如果用户编辑 QTableWidgetItem
并通过按 ESC
中止它,我如何捕捉?我通过捕获 QTableWidget::cellDoubleClicked
来处理相应项目的内容,并且我通过监听 QTableWidget::cellChanged
知道什么时候发生了变化。但是当用户按下ESC
时,我却不知道
我试图在 QTableWidget
上安装一个事件过滤器,但它只捕获小部件本身接收到的按键——编辑器似乎是另一回事。
如有任何帮助,我们将不胜感激!
你必须使用委托并使用你的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();
}