QListView的Esc按键事件

时间:2013-09-21 16:31:13

标签: qt qt4 qt5 signals-slots qlistview

我创建了一个简单的QListView添加了QStringListModel,允许添加项目并编辑其文本。但是我不想允许添加空字段,并且我通过使用模型中的dataChanged信号来部分实现这一点,如果列表项没有插入文本或用户按下{{1没有添加文本的密钥。

但是,如果按Enter键,该字段将保持为空,并且不会发出Esc信号。如果该字段为空而没有重载dataChanged类,这将是多余的(我使用设计器创建表单),我如何得到通知?

是否有另一个发出的信号或我可以用来实现的信号?

谢谢!

1 个答案:

答案 0 :(得分:5)

在主GUI类中使用event filters

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;
}

在Qt Designer中使用自定义小部件很简单。右键单击QListView并选择Promote to ...添加一个新类并将其应用于小部件。

http://qt-project.org/doc/qt-4.8/designer-using-custom-widgets.html