crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Ошибка в отлове события KeyPress для таблицы
pharret31
  опции профиля:
сообщение 25.7.2013, 19:04
Сообщение #1


Студент
*

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

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




Репутация:   0  


Доброго времени суток!

Подскажите, пожалуйста, что с этим можно сделать? :unsure:
Нужно при нажатии на Enter вызывать функцию, которая обрабатывает значения в таблице и закрывает форму, но чегой-то тут не так =)

AddForm::AddForm(QWidget *parent) :
    QWidget(parent)
{
...

    m_addTable = new QTableWidget();
    m_addTable->installEventFilter(this);

...
}


bool AddForm::eventFilter(QObject *obj, QEvent *evt)
{
    if (evt->type() == QEvent::Resize)
    {
        stretchValueColumn();
    }
    else if (evt->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = (QKeyEvent *)evt;

        if (keyEvent->key() == Qt::Key_Enter)
        {
            onOKButtonClicked();
        }
    }

    return QWidget::eventFilter(obj, evt);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 25.7.2013, 19:52
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

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




Репутация:   3  


А что возвращает keyEvent->key()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pharret31
  опции профиля:
сообщение 25.7.2013, 20:07
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(ilyabvt @ 26.7.2013, 0:52) *
А что возвращает keyEvent->key()?


16777220
это цифровой код клавиши Enter и именно его нужно писать в условие вместо Qt::Key_Enter? :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.7.2013, 6:36
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


по меньшей мере нужно проверять, что объект наш

bool AddForm::eventFilter(QObject *obj, QEvent *evt)
{
   if(obj==m_addTable )
   {
       ....
   }

    return QWidget::eventFilter(obj, evt);
}


но, может, и не в этом дело )

onOKButtonClicked() - это у тебя слот ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pharret31
  опции профиля:
сообщение 26.7.2013, 7:16
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 26.7.2013, 11:36) *
по меньшей мере нужно проверять, что объект наш

bool AddForm::eventFilter(QObject *obj, QEvent *evt)
{
   if(obj==m_addTable )
   {
       ....
   }

    return QWidget::eventFilter(obj, evt);
}


но, может, и не в этом дело )

onOKButtonClicked() - это у тебя слот ?


Ну, так он должен по идее с любого объекта на виджете среагировать. =)
Верно, это слот. И, кстати, с цифрами в условии все работает, но это-ли не костыль? :huh:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.7.2013, 7:43
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


pharret31,

Цитата
Qt::Key_Return 0x01000004
Qt::Key_Enter 0x01000005 //Typically located on the keypad.

:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
pharret31
  опции профиля:
сообщение 26.7.2013, 8:06
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(Алексей1153 @ 26.7.2013, 12:43) *
pharret31,

Цитата
Qt::Key_Return 0x01000004
Qt::Key_Enter 0x01000005 //Typically located on the keypad.

:)


Спасибо! И правда не ту кнопку юзал :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.7.2013, 22:27
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Ну и мои 5 копеек:
Цитата(pharret31 @ 25.7.2013, 21:04) *
 QKeyEvent *keyEvent = (QKeyEvent *)evt;
отвыкай от такого приведения типа в Си++, оно однажды заставит твои мозги кипеть.
А в случае с Qt нужно вобще использовать qobject_cast<>()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.11.2024, 2:11