Russian Qt Forum

Qt => Общие вопросы => Тема начата: ymb от Январь 13, 2010, 15:28



Название: Как добраться до метода keyPressEvent виджета на форме? (Qt 4.6.0)
Отправлено: ymb от Январь 13, 2010, 15:28
Есть форма Form1. на ней есть три виджета типа QLineEdit. необходимо сделать преход от  QLineEdit1 к QLineEdit2 и далее к QLineEdit3 по нажатию клавиши Enter. В файле Form1.cpp пишу функцию

void Form1::keyPressEvent( QKeyEvent *event )
{
    if (event->key() == Qt::Key_Enter)

        ... обработка нажатия Enter
   
   }
}

Какие дальнейшие действия?

PS: Почему-то программа реагирует только на кнопку Enter цифровой клавиатуры. А на Enter основной не реагирует.


Название: Re: Как добраться до метода keyPressEvent виджета на форме? (Qt 4.6.0)
Отправлено: Dendy от Январь 13, 2010, 15:39
Потому что это разные кнопки - Qt::Key_Enter и Qt::Key_Return. Я бы на вашем месте реагировал на сигнал QLineEdit::returnPressed() и устанавливал фокус с помощью QWidget::setFocus().


Название: Re: Как добраться до метода keyPressEvent виджета на форме? (Qt 4.6.0)
Отправлено: ymb от Январь 13, 2010, 15:59
Сделал примерно так:

void Form1::on_QLineEdit1_returnPressed()
{
    QLineEdit2->setFocus();
}

void Form1::on_QLineEdit2_returnPressed()
{
    QLineEdit3->setFocus();
}

Теперь работает.
Спасибо.


Название: Re: Как добраться до метода keyPressEvent виджета на форме? (Qt 4.6.0)
Отправлено: DS_tm от Январь 13, 2010, 17:26
можно также в конструкторе вручную законнектить returnPassed от всех QLineEdit на общий слот и в слоте вызывать focusNextChild(). Такой вариант кажеться мне более локаничным.