2013-09-21 5 views
1

Я создал простой файл QListView, добавленный QStringListModel, который позволяет добавлять элементы и редактировать их текст. Но я не хочу, чтобы пустые поля добавлялись, и я частично достиг этого, используя сигнал dataChanged от модели, которая испускается, если элемент списка теряет фокус без вставленного текста или пользователь нажимает клавишу Enter без добавления текста.Событие для нажатия клавиши Esc для QListView

Однако, если вы нажмете клавишу Esc, поле останется пустым и не будет выходить сигнал dataChanged. Как я могу получить уведомление, если поле осталось пустым, не перегружая класс QListView, который был бы утомительным (я использовал конструктор для создания формы)?

Есть ли другой сигнал, который испускается или метод, который я могу использовать для достижения этого?

Спасибо!

ответ

4

Использование event filters в главном классе 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; 
} 

Это простой в использовании пользовательских виджетов в Qt Designer. Щелкните правой кнопкой мыши на QListView и выберите «Содействовать» ... добавьте новый класс и примените его к виджету.

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

+0

Вы уверены, что представление находится объект, который принимает ключевое событие? Когда пользователь редактирует элемент списка, есть виджет редактирования строки, который обрабатывает ввод пользователя, поэтому, вероятно, редактор также обрабатывает ключевые события? – vahancho

+0

Ну, это может быть правдой, я никогда не использовал QListView. Но я не думаю, что есть другой способ сделать это, если это не сработает ... Однако использование пользовательских виджетов в Qt Designer просто, я добавлю его к моему ответу. – headsvk