crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Перехват нажатий клавиш в делегате
Dark
  опции профиля:
сообщение 6.2.2012, 11:29
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 12.1.2012
Пользователь №: 3122

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 20:36