Russian Qt Forum

Qt => Вопросы новичков => Тема начата: stranger от Октябрь 23, 2015, 15:33



Название: Потомок от QTableWidgetItem и keyPressEvent
Отправлено: stranger от Октябрь 23, 2015, 15:33
Добрый день!

Мне надо отловить нажатие Enter внутри ячейки QTableWidget. Унаследовал от QTableWidgetItem:
Код:
class TableItem : public QObject, public QTableWidgetItem
{
    Q_OBJECT
public:
    TableItem(QString s);
    void                keyPressEvent(QKeyEvent *e);
signals:
    void                enter_pressed(QString);
};
Код:
TableItem::TableItem(QString s) : QTableWidgetItem(s)
{
}

void TableItem::keyPressEvent(QKeyEvent *e)
{
    qDebug("[TableItem::keyPressEvent]");
    if (e->key() == Qt::Key_Return) {
        emit enter_pressed(text());
    }
}

При создании таблицы:
Код:
TableItem* ti = new TableItem(QString("%1.%2").arg(i).arg(j));
ui->tableWidget->setItem(i, j, ti);
connect(ti, SIGNAL(enter_pressed(QString)), this, SLOT(enter_slot(QString)));
Однако, enter-slot ничего не получает, в метод TableItem::keyPressEvent не заходит.

Что я сделал не так и как исправить?


Название: Re: Потомок от QTableWidgetItem и keyPressEvent
Отправлено: Igors от Октябрь 23, 2015, 16:16
Он приходит на viewportEvent, его и перекрывайте


Название: Re: Потомок от QTableWidgetItem и keyPressEvent
Отправлено: stranger от Октябрь 23, 2015, 16:31
Он приходит на viewportEvent, его и перекрывайте

В TableItem преопределить viewportEvent и там определять, какого типа событие пришло и т.д.?
Я правильно понял?


Название: Re: Потомок от QTableWidgetItem и keyPressEvent
Отправлено: Igors от Октябрь 23, 2015, 17:23
В TableItem преопределить viewportEvent и там определять, какого типа событие пришло и т.д.?
Я правильно понял?
Да, ну или альтернатива - фильтр


Название: Re: Потомок от QTableWidgetItem и keyPressEvent
Отправлено: stranger от Октябрь 23, 2015, 17:29
Спасибо!