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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как поймать момент получения фокуса?  (Прочитано 7182 раз)
Caduceus
Гость
« : Июль 19, 2010, 22:56 »

Мне надо сделать, чтобы когда встаем на QLineEdit , то сразу бы атоматически селектился весь текст
Переопределил QLineEdit и в focusInEvent вставил selectAll

Не заработало. Куда надо вставить selectAll, чтоб получилось как мне надо?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июль 19, 2010, 23:10 »

может не правильно переопределил?
по идее всё должно работать
Записан

Юра.
Caduceus
Гость
« Ответ #2 : Июль 19, 2010, 23:16 »

Дело в том, что если я ставлю точку останова, то дебагер там останавливается И!!! выделается потом как надо. А если точку останова не ставлю, то не выделяется Улыбающийся
Записан
SimpleSunny
Гость
« Ответ #3 : Июль 20, 2010, 11:31 »

Возможно после focusInEvent приходят еще какие-то события, которые снимают выделение.
Записан
blindvic
Гость
« Ответ #4 : Декабрь 18, 2010, 12:45 »

видимо сначала обрабатывается focusInEvent, в котором выделяется весь текст, а потом mouseclick к-й это выделение сбрасывает?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #5 : Декабрь 18, 2010, 13:13 »

QTimer::singleShot(0, this, SLOT(selectAll()));
Записан
Thanatos
Гость
« Ответ #6 : Август 25, 2011, 03:00 »

Оживим старый труп Улыбающийся

Цель прежняя: при клике мышью на QLineEdit должен выделяться текст
Фильтр событий отрабатывает, но выделения нет

Код:
bool ChatWindow:: eventFilter(QObject * obj, QEvent * event)
{
    switch(event->type())
    {
    case QEvent::FocusIn :
    {
        if(obj == ui->adressLine || obj == ui->nickName)
            dynamic_cast<QLineEdit*>(obj)->selectAll();
         break;
     }
     //..................
     }
 }


QTimer::singleShot(0, ui->adressLine, SLOT(selectAll()));
QTimer::singleShot(0, ui->nickName, SLOT(selectAll()));
также не помогает

может у кого новый опыт в решении этой проблемы накопился?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #7 : Август 25, 2011, 07:33 »

А вызов оригинального eventFilter там есть?
Покажите полностью код.
Записан
Thanatos
Гость
« Ответ #8 : Август 25, 2011, 12:58 »

Вот весь фильтр событий

Код:
bool ChatWindow:: eventFilter(QObject * obj, QEvent * event)
{
switch(event->type())
{
case QEvent::FocusIn :
        {
if(obj == ui->adressLine || obj == ui->nickName)
          dynamic_cast<QLineEdit*>(obj)->selectAll();
break;
        }
case QEvent::MouseButtonRelease :
{
if(obj == ui->connectButton)
          startConnect(!ui->connectButton->isChecked());
break;
}
default: return QWidget::eventFilter(obj , event);
}

return QWidget::eventFilter(obj , event);
}

И в догонку ещё один момент, чтоб новую тему не создавать.
case QEvent::MouseButtonRelease вызывается при нажатии на кнопку ui->connectButton, которая является зажимаемой (setCheckable(true)). Проблема в том, что событие вызывается раньше, чем свойство checked меняет свое значение. (В итоге в мою функцию startConnect(bool checked) приходиться передавать инвертированое значение.) А хотелось бы наоборот!
Записан
Thanatos
Гость
« Ответ #9 : Август 28, 2011, 18:43 »

Проблема решена заменой QEvent::FocusIn на QEvent::MouseButtonRelease
Записан
Alexandr
Гость
« Ответ #10 : Сентябрь 05, 2011, 12:14 »

Так как QLineEdit все равно переопределять, и ничего нестандартного, кроме выделения текста после получения фокуса не требовалось, то я сделал так:
Код:
#ifndef CUSTOM_LINE_EDIT_H
#define CUSTOM_LINE_EDIT_H

#include <QtGui/QtGui>

class CCustomLineEdit :
public QLineEdit
{
public:
CCustomLineEdit(QWidget *parent=0) : QLineEdit(parent) {};
~CCustomLineEdit(void) {};

protected:
virtual void mouseReleaseEvent(QMouseEvent * e) {
QLineEdit::mouseReleaseEvent(e);
selectAll();
};
};

#endif // CUSTOM_LINE_EDIT_H
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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