Доброе время суток. У меня такой вопрос: как отловить нажатие клавиш в редакторе делегата, к примеру наследника 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);
}