Доброе время суток. У меня такой вопрос: как отловить нажатие клавиш в редакторе делегата, к примеру наследника QLineEdit?
Создал наследника, разместил в окне, переопределил keyPressEvent, всё работает. Запихнул его в делегат QTableWidget, нажатия кнопок не ловятся.
Код наследника:
class Edit1 : public QLineEdit {
    Q_OBJECT
public:
    Edit1(QWidget *parent = 0) : QLineEdit(parent) {}
    void keyPressEvent(QKeyEvent *e);
};
void Edit1::keyPressEvent(QKeyEvent *e)
{
    switch (e->key()) {
    case Qt::Key_F1:
        qDebug() << "F1";
        break;
    default:
        QLineEdit::keyPressEvent(e);
    }
}

Код делегата:
class SDelegate2_1 : public QItemDelegate {
    Q_OBJECT
public:
    SDelegate2_1(QObject *parent = 0) : QItemDelegate(parent) {}
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void setEditorData(QWidget *editor, const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
QWidget *SDelegate2_1::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    Edit1 *editor = new Edit1(parent);
    return editor;
}
void SDelegate2_1::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QString str = index.model()->data(index).toString();
    Edit1 *le = static_cast<Edit1*>(editor);
    le->setText(str);
}
void SDelegate2_1::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    Edit1 *le = static_cast<Edit1*>(editor);
    QString value = le->text();
    model->setData(index,value);
}
void SDelegate2_1::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    editor->setGeometry(option.rect);
}