Qt QListView的Esc按键事件

Qt QListView的Esc按键事件,qt,qt4,qt5,signals-slots,qlistview,Qt,Qt4,Qt5,Signals Slots,Qlistview,我创建了一个简单的QListView添加了一个QStringListModel,允许添加项目并编辑其文本。但我不想允许添加空字段,我通过使用模型中的dataChanged信号部分实现了这一点,如果列表项失去焦点而未插入文本,或者用户按下Enter键而未添加文本,则会发出该信号 但是,如果按下Esc键,字段将保持为空,并且不会发出dataChanged信号。如果字段为空,而不重载QListView类(这将是一个繁琐的过程)(我使用设计器创建表单),如何得到通知 是否有其他信号发出,或者我可以使用其

我创建了一个简单的
QListView
添加了一个
QStringListModel
,允许添加项目并编辑其文本。但我不想允许添加空字段,我通过使用模型中的
dataChanged
信号部分实现了这一点,如果列表项失去焦点而未插入文本,或者用户按下
Enter
键而未添加文本,则会发出该信号

但是,如果按下
Esc
键,字段将保持为空,并且不会发出
dataChanged
信号。如果字段为空,而不重载
QListView
类(这将是一个繁琐的过程)(我使用设计器创建表单),如何得到通知

是否有其他信号发出,或者我可以使用其他方法来实现

谢谢

在主GUI类中使用:

void GUI::GUI()
{     
    ui->mListView->installEventFilter(this);
}
bool GUI::eventFilter(QObject *object, QEvent *event)
{
    if (object == ui->mListView && event->type() == QEvent::KeyPress) {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
        if (ke->key() == Qt::Key_Escape)
           // special Esc handling here
    }
    else
        return false;
}
void GUI::GUI()
{     
ui->mListView->installEventFilter(此);
}
BOOLGUI::eventFilter(QObject*对象,QEvent*事件)
{
if(object==ui->mListView&&event->type()==QEvent::KeyPress){
QKeyEvent*ke=静态施法(事件);
如果(ke->key()==Qt::key\u Escape)
//这里的特殊Esc处理
}
其他的
返回false;
}
在Qt设计器中使用自定义小部件很简单。右键单击QListView并选择“升级到…”。。。添加一个新类并将其应用于小部件


您确定列表视图是接收关键事件的对象吗?当用户编辑列表视图项时,有一个行编辑小部件处理用户输入,所以该编辑器可能也处理关键事件?嗯,这可能是真的,我从未使用过QListView。但是如果这不起作用,我想没有别的办法了。。。然而,在Qt设计器中使用自定义小部件很简单,我将把它添加到我的答案中。