Реализация функции слота в том и только в том случае, если текстовое поле имеет фокус и & quot; введите & quot; нажата?

По сути, я просто хочу очистить текстовое поле, если пользователь «нажал» на текстовое поле а также клавиша ввода / возврата была нажата. После некоторого исследования я обнаружил, что вы должны сначала установить focusPolicy для каждого виджета. Готово.

 dataSend_area->setFocusPolicy(Qt::ClickFocus);

И с этого момента я потерялся. Из того, что я могу сказать, мне нужно будет реализовать slot Функция для реализации пользовательской функции, когда эти условия выполняются. Псевдокод, представленный ниже, примерно такой, насколько я понял. Я просмотрел документацию по Qt и обнаружил, что разбросаны небольшие кусочки информации, но вряд ли есть какая-либо информация, касающаяся объединения всех функциональных возможностей.

keyPressEvent(enter/return Key){
if ( textBox has focus )
//do
else
return
}

1

Решение

Вы должны переопределить функцию keyPressEvent. Этот код может помочь.

void MainWidget::keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Return && my_text_widget->hasFocus()) {
my_text_widget->setText("");
}
}

Вот пример того, как переопределить события
http://programmingexamples.wikidot.com/qt-events

1

Другие решения

Правильно, вы поняли концепцию более или менее правильно. Вам действительно нужны следующие действия:

1) переопределить обработчик события нажатия клавиши.

2) Проверьте, нажата ли клавиша ввода / возврата.

3) Проверьте, имеет ли виджет фокус.

Однако вам не нужно портить сигнал о том, что вы упомянули. События по-разному управляются для сигнальных слотов на вашем слое.

Ваш псевдокод может быть превращен в реальный код следующим образом:

#include <QKeyEvent>

...

void MyWidget::keyPressEvent(QKeyEvent *event)
{
if (hasFocus())
if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
clear();
}
1

По вопросам рекламы [email protected]