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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сигнал для QLineEdit на получение фокуса ввода клавиатуры  (Прочитано 9421 раз)
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.19 секунд. Запросов: 20.