Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
1

eventFilter

12.02.2012, 15:45. Показов 3847. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно создать фильтр событий например для запрета ввода определенных символов в QLineEdit
Что я делаю:

.h file
C++
1
2
3
4
5
6
7
class MyClass : public QDialog
{
   // ...
protected:
  void myProc();
  bool eventFilter(QObject *, QEvent *);
}
.cpp file
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void MyClass::myProc()
{
 
  // ...
  QLineEdit *edit = new QLineEdit;
  edit->installEventFilter(this);
  // ...
}
 
bool MyClass::eventFilter(QObject *obj, QEvent *e)
{
    if( obj->metaObject()->className() == "QLineEdit" )
    {
        // Блокируем тут нажатие лишних клавиш
        if( e->type() == QEvent::KeyPress )
        {
            QKeyEvent *keyEvent = static_cast< QKeyEvent * >(e);
            switch( keyEvent->key() )
            {
            case '\t':
                keyEvent->ignore();
            default:
                keyEvent->accept();
            }
            return true;
        }
    }
    return QObject::eventFilter(obj, e);
}
Эта процедура вызывается при различных манипуляциях с окошком (добавить / удалить элементы, изменить текст окошка и тп), но не реагирует на нажатие клавиш в QLineEdit.

В общем то данную процедуру я взял из мануала.
Пробовал сделать ровно так же как там, т.е. тоже отдельный класс, где определен лишь один метод eventFilter(...);
Назначал экземпляр этого класса для QLineEdit в качестве фильтра.
В итоге в процедуру действительно поступали различные события. Но дальше сточки с определением типа obj не прошел

Что я делаю неправильно? Наставьте на путь истинный.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2012, 15:45
Ответы с готовыми решениями:

Разобраться с EventFilter
Доброго времени суток, не могу разобраться с фильтром, bool MainWindow::eventFilter(QObject...

не работает eventFilter()
Ниже код: newfile::newfile(QWidget *parent) : QWidget(parent), ui(new Ui::newfile) { ...

Есть составной виджет с кучей дочерних виджетов, как правильно установить eventFilter
Привет! Есть QFrame с кучей всяких баттонов на нём, хочу сделать обработку событий для всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
12.02.2012, 17:23 2
прочитал только первое предложение, дальше не смотрел...
если вам нужно сделать только фильтр для ввода текста - смотрите в сторону QRegExpValidator

Добавлено через 58 секунд
создаёте валидатор, указывая в нем регулярку, дальше подсовываете этот фалидатор LineEdit-у и всё, больше ничего делать не надо)) всё делается автоматически за Вас
1
60 / 60 / 8
Регистрация: 15.10.2010
Сообщений: 356
12.02.2012, 17:30  [ТС] 3
=D
Да, у меня привычка такая вот вредная...
Писать всякую фигню... И писать много)
Валидаторы я знаю..
Но конкретно этого не видел) Спасибо
0
12.02.2012, 17:30
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru