Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: kolob от Февраль 07, 2011, 11:31



Название: eventFilter и LineEdit, ComboBox
Отправлено: kolob от Февраль 07, 2011, 11:31
Добрый день коллеги! Есть два вопросика (простеньких). Мне как то трудно в них разобраться.
1. Навесил фильтр на LineEdit:
Код:
bool Form::eventFilter(QObject *target, QEvent *event)
               {
                 if(target == comboBox || target == lineEdit)
    if(event->type() == QEvent::FocusIn)
    {
if(target == comboBox)
contactComboBox->removeItem(0);//contactComboBox->setCurrentText("");
if(target == lineEdit)
lineEdit->clear();
return true;
                    }
                  return QWidget::eventFilter(target, event);
}
Получается что после получения фокуса lineEdit очищается,а мигающего курсора ввода в нем нет. Как его вернуть?

2. Почему то при получении фокуса comboBox не очищается. Код выше. Помогите кто сталкивался с этим.


Название: Re: eventFilter и LineEdit, ComboBox
Отправлено: vvvxmag от Февраль 07, 2011, 13:22
Если ты полностью берешь на себя обработку Event то функция должна вернуть true;
Если же ты хочешь только выполнить какое-то действие при этом не нарушаю обычный ход веще то нужно вернуть false

Я думаю что в случае с LineEdit очистив его , ему не был установлен режим ввода;

Попробуй возвращать false;

Или принудительно ставь его в режим редактирования


Название: Re: eventFilter и LineEdit, ComboBox
Отправлено: kolob от Февраль 07, 2011, 15:07
Нет false возвращать не надо. Я не полностью обрабатываю это событие поэтому возвращать надо что то типа
Код:
QDialog::eventFilter(target, event);

Спасибо


Название: Re: eventFilter и LineEdit, ComboBox
Отправлено: kolob от Февраль 07, 2011, 16:48
Замечание. Странное поведение ComboBox. Если свойство edittable == true (можно редактировать), то на на события он не реагирует. В частности при получении фокуса текст не удаляется (в моем примере). А если равно false то все нормально работает. Как же это исправить так чтобы и при edittable == true тоже все работало.