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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сигнал для QLineEdit на получение фокуса ввода клавиатуры  (Прочитано 9648 раз)
Evgeniya
Гость
« : Марта 12, 2009, 11:19 »

Помогите, плииииз, написать сигнал для QLineEdit на получение фокуса ввода клавиатуры...т.е. мне нужно, чтобы он сразу сработал, когда курсор переходит на QLineEdit просто из стандартных никакой не подходит как мне кажется... Непонимающий
Записан
BRE
Гость
« Ответ #1 : Марта 12, 2009, 11:25 »

Помогите, плииииз, написать сигнал для QLineEdit на получение фокуса ввода клавиатуры...т.е. мне нужно, чтобы он сразу сработал, когда курсор переходит на QLineEdit просто из стандартных никакой не подходит как мне кажется... Непонимающий
Тут тебе эвенты помогут. Смотри virtual void QWidget::focusInEvent ( QFocusEvent * event ).
Также сразу посмотри про void QObject::installEventFilter ( QObject * filterObj ).
Записан
spirit
Гость
« Ответ #2 : Марта 12, 2009, 11:36 »

[offtop]
где-то я такое уже встречал на форуме Улыбающийся
[/offtop]
Записан
Evgeniya
Гость
« Ответ #3 : Марта 12, 2009, 13:41 »

Тут тебе эвенты помогут. Смотри virtual void QWidget::focusInEvent ( QFocusEvent * event ).
Также сразу посмотри про void QObject::installEventFilter ( QObject * filterObj ).


virtual void QWidget::focusInEvent ( QFocusEvent * event ) будет относиться же ко всему классу...а чтобы отобрать нужный объект мне нужно воспользоваться void QObject::installEventFilter ( QObject * filterObj )....я так понимаю

И вот я пытаюсь так сделать

Код
C++ (Qt)
void QMainWindow::focusInEvent(QFocusEvent * event){
ui.lineEdit_2->installEventFilter(this);
QMessageBox::information(0,"Information","фокус ввода получен");
}

Код
C++ (Qt)
bool QMainWindow::eventFilter(QObject *obj, QEvent *ev){
if (obj == ui.lineEdit_2) {
           if (ev->type() == QEvent::FocusIn) {
               return true;
           } else {
               return false;
           }
       } else {
           // пересылка сообщения родительскому классу
           return raskladka::eventFilter(obj, ev);
       }
 
}

но толко у меня все-равно ничего не получается, возможно я не правильно понимаю это...посмотрите, пожалуйста
« Последнее редактирование: Апреля 10, 2009, 12:10 от pastor » Записан
Evgeniya
Гость
« Ответ #4 : Марта 12, 2009, 14:14 »

чет я совсем запуталась...и похожей темы сдеся не найду  Злой
Записан
uriel
Гость
« Ответ #5 : Марта 12, 2009, 14:58 »

Вы почти на правильном пути. Улыбающийся Только установку фильтра можно проводить сразу в конструкторе родительского виджета.
Код
C++ (Qt)
MainWindow::MainWindow() {
  ui.lineEdit_2->installEventFilter(this);
}
 
bool MainWindow::eventFilter(QObject *obj, QEvent *ev){
  if (obj == ui.lineEdit_2 && ev->type() == QEvent::FocusIn)
              QMessageBox::information(0, "Information", "Фокус ввода получен");
 
  return MainWindow::eventFilter(obj, ev);
}
 
Записан
Evgeniya
Гость
« Ответ #6 : Марта 12, 2009, 16:34 »

Спасибочки!!!
работает так

Код
C++ (Qt)
bool MainWindow::eventFilter(QObject *obj, QEvent *ev){
if (obj == ui.lineEdit_2 ){
if(ev->type() == QEvent::FocusIn){
           QMessageBox::information(0, "Information", "Фокус ввода получен");
           return true;
}
else return false;
}
else return MainWindow::eventFilter(obj, ev);
}
а в конструкторе вызываем
ui.lineEdit_2->installEventFilter(this);

только вот это сообщение постоянно выскакивает и его невозможно закрыть...ну что здесь не так Непонимающий
« Последнее редактирование: Апреля 10, 2009, 12:11 от pastor » Записан
Evgeniya
Гость
« Ответ #7 : Марта 12, 2009, 16:42 »

т.е. постоянно выполняется:
QMessageBox::information(0, "Information", "Фокус ввода получен");
Записан
BRE
Гость
« Ответ #8 : Марта 12, 2009, 16:53 »

т.е. постоянно выполняется:
QMessageBox::information(0, "Information", "Фокус ввода получен");
Улыбающийся
Потому что после закрытия MessageBox фокус передеается твоему QLineEdit и все повторяется, т.е. снова открывается MessageBox.
Записан
Evgeniya
Гость
« Ответ #9 : Марта 12, 2009, 17:02 »

А если выполнять другое действие вместо этого, или вообще ничего не выплнять...то пропадает сам курсор..все пишется, только курсора не видно  Злой
это правильно, так и должно быть??
Записан
spirit
Гость
« Ответ #10 : Марта 12, 2009, 17:20 »

нет так быть не должно. я такое тоже замечал.
Записан
BRE
Гость
« Ответ #11 : Марта 12, 2009, 17:22 »

А если выполнять другое действие вместо этого, или вообще ничего не выплнять...то пропадает сам курсор..все пишется, только курсора не видно  Злой
это правильно, так и должно быть??
Так не должно быть.
В ветке, где ты проводишь обработку убери QMessageBox и вместо return true делай return false.

Для информации: Возвращая true, ты говоришь Qt что дальнейшую обработку этого события проводить не надо. А по этому событию, как раз и произодятся необходимые настройки QLineEdit.
« Последнее редактирование: Марта 12, 2009, 17:25 от BRE » Записан
Evgeniya
Гость
« Ответ #12 : Марта 12, 2009, 17:57 »

Спасибочкии всем огромное!!!!!Все получилось!!!!!!! Улыбающийся Улыбающийся Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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