Russian Qt Forum
Ноябрь 05, 2024, 22:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qlineedit событие при потери фокуса  (Прочитано 8919 раз)
admsasha
Гость
« : Май 22, 2014, 07:09 »

Как отловить потерю и получение фокуса у QLineEdit ?
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Май 22, 2014, 07:18 »

Код
C++ (Qt)
void QWidget::focusInEvent(QFocusEvent * event) [virtual protected]
void QWidget::focusOutEvent(QFocusEvent * event) [virtual protected]
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 22, 2014, 09:26 »

Чтобы не плодить темы - вспомнилась еще одна деталь с QLineEdit.

Пример: в немодальном диалоге юзер вводит текст в QLineEdit. Немедленно реагировать (на каждый символ) часто плохо, если приличные действия по приему - будет мельтешение/залипание. Нужна задержка, напр если в течение 0.5 сек (задается) не последовало еще ввода - принять данные.

Вопрос: это самому делать или можно чем-то воспользоваться ?

Спасибо 
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #3 : Май 22, 2014, 09:51 »

Вопрос: это самому делать или можно чем-то воспользоваться ?
я сам делал (псевдокод (qt5)):
Код
C++ (Qt)
QLineEdit *someLineEdit = ...
 
QTimer *changeTimer = new QTimer(someLineEdit);
changeTimer.setInterval(500);
changeTimer.setSingleShot(true);
 
QObject::connect(someLineEdit, &QLineEdit::textChanged,
   [changeTimer] () { changeTimer->start(); }
);
QObject::connect(changeTimer, &QTimer::timeout,
   [this, someLineEdit] () {
       emit this->aboutTextChanged(someLineEdit->text());
   }
);
 

вопрос в силе, может есть готовое решение?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 22, 2014, 10:10 »

я сам делал (псевдокод (qt5)):
Там еще надо застрелить таймер если фокус соскочил или Enter, т.е. когда по-любому надо принять. Ну и edit'ов совсем не один. В общем "налипает" довольно много кода
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #5 : Май 22, 2014, 10:18 »

Там еще надо застрелить таймер если фокус соскочил или Enter
зачем, singleShot же?
« Последнее редактирование: Май 22, 2014, 10:19 от Johnik » Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #6 : Май 26, 2014, 08:19 »

наткнулся:
Код
C++ (Qt)
void QLineEdit::editingFinished() [signal]
Цитировать
This signal is emitted when the Return or Enter key is pressed or the line edit loses focus. Note that if there is a validator() or inputMask() set on the line edit and enter/return is pressed, the editingFinished() signal will only be emitted if the input follows the inputMask() and the validator() returns QValidator::Acceptable.
Записан
Bepec
Гость
« Ответ #7 : Май 26, 2014, 09:03 »

Не всегда editingFinished присылается. (Qt 4.7.2)

PS информационный блок Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Май 26, 2014, 09:17 »

наткнулся:
Код
C++ (Qt)
void QLineEdit::editingFinished() [signal]
Цитировать
This signal is emitted when the Return or Enter key is pressed or the line edit loses focus. Note that if there is a validator() or inputMask() set on the line edit and enter/return is pressed, the editingFinished() signal will only be emitted if the input follows the inputMask() and the validator() returns QValidator::Acceptable.
Ну да, если этот сигнал получен - с таймером надо что-то делать. А использовать только этот сигнвл (игнорировать текущий ввод) тоже не выход, т.к. заставляет юзера все время лупить Enter
Записан
Bepec
Гость
« Ответ #9 : Май 26, 2014, 09:29 »

Причем добавлю - именно Enter на основной клавиатуре. На дополнительной уже не работает Улыбающийся
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #10 : Май 26, 2014, 09:42 »

проверил только что, работает как на основной так и на дополнительной, т.е. Enter и Return
Записан
Bepec
Гость
« Ответ #11 : Май 26, 2014, 11:10 »

Скажу заранее спасибо, только отпишитесь какая версия Qt. Шоп я знал Улыбающийся
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #12 : Май 26, 2014, 11:43 »

qt5 (5.2.1, 5.3.0) изначально, теперь проверил и на qt4 (4.8.5)
Записан
Bepec
Гость
« Ответ #13 : Май 26, 2014, 14:20 »

Оукей, ещё раз спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.202 секунд. Запросов: 23.