По сути, я просто хочу очистить текстовое поле, если пользователь «нажал» на текстовое поле а также клавиша ввода / возврата была нажата. После некоторого исследования я обнаружил, что вы должны сначала установить focusPolicy
для каждого виджета. Готово.
dataSend_area->setFocusPolicy(Qt::ClickFocus);
И с этого момента я потерялся. Из того, что я могу сказать, мне нужно будет реализовать slot
Функция для реализации пользовательской функции, когда эти условия выполняются. Псевдокод, представленный ниже, примерно такой, насколько я понял. Я просмотрел документацию по Qt и обнаружил, что разбросаны небольшие кусочки информации, но вряд ли есть какая-либо информация, касающаяся объединения всех функциональных возможностей.
keyPressEvent(enter/return Key){
if ( textBox has focus )
//do
else
return
}
Вы должны переопределить функцию 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) переопределить обработчик события нажатия клавиши.
2) Проверьте, нажата ли клавиша ввода / возврата.
3) Проверьте, имеет ли виджет фокус.
Однако вам не нужно портить сигнал о том, что вы упомянули. События по-разному управляются для сигнальных слотов на вашем слое.
Ваш псевдокод может быть превращен в реальный код следующим образом:
#include <QKeyEvent>
...
void MyWidget::keyPressEvent(QKeyEvent *event)
{
if (hasFocus())
if(event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
clear();
}