Переопределение функции keyPressEvent для определенного виджета |
Здравствуйте, гость ( Вход | Регистрация )
Переопределение функции keyPressEvent для определенного виджета |
kwisp |
25.3.2010, 10:21
Сообщение
#21
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
Какой глобальный фильтр событий? Где он должен быть? Как его вызвать? кто то первый раз за мужем. если не ошибаюсь если в QApplication переопределить фильтр событий то он будет глобальным для всего приложения. как ты можешь быть уверен что setFocus() вызванный в конструкторе , гарантирует сохранность фокуса ввода после получения окном события отрисовки, нажатия клавиш мыша таба? |
|
|
AD |
25.3.2010, 10:29
Сообщение
#22
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
если не ошибаюсь если в QApplication переопределить фильтр событий то он будет глобальным для всего приложения. Я ведь его уже привел?!!!. Я переопределил эту функцию в классе, который является наследником QMainWindow. Повторюсь, не помогает как ты можешь быть уверен что setFocus() вызванный в конструкторе , гарантирует сохранность фокуса ввода после получения окном события отрисовки, нажатия клавиш мыша таба? А где тогда это сделать? Куда ткнуть вызов этой функции? |
|
|
kwisp |
25.3.2010, 10:37
Сообщение
#23
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
AD,
и я повторюсь. Попробуй унаследоваться от QApplication переопределить в этом классе фильтр событий! |
|
|
AD |
25.3.2010, 11:27
Сообщение
#24
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
А что по поводу фокуса ввода? Можно какой-нибудь маленький примерчик?
|
|
|
kwisp |
25.3.2010, 13:26
Сообщение
#25
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
AD |
25.3.2010, 15:45
Сообщение
#26
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Не удается такой финт ушами.
Реально, нужна помощь для того, чтобы разобраться.... Я не понимаю, как еще надо переопределить этот класс: main.h
main.cpp
Выдаются следующие ошибки: Цитата main.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Application::metaObject(void)const " (?metaObject@Application@@UBEPBUQMetaObject@@XZ) main.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall Application::qt_metacast(char const *)" (?qt_metacast@Application@@UAEPAXPBD@Z) main.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall Application::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Application@@UAEHW4Call@QMetaObject@@HPAPAX@Z) |
|
|
kwisp |
25.3.2010, 16:06
Сообщение
#27
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
вопрос не по теме по-моему.
попробуй вынести вынеси интерфейс и реализацию в application.h application.cpp |
|
|
AD |
25.3.2010, 16:43
Сообщение
#28
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
вопрос не по теме по-моему. Еще как по теме. Ни к какой другой теме он не относится. Тот же самый фильтр событий. попробуй вынести вынеси интерфейс и реализацию в application.h application.cpp Попробую. Хм... Приложение вообще не попадает в эту функцию.... |
|
|
AD |
26.3.2010, 13:36
Сообщение
#29
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Удалось попасть в глобальный фильтр событий, но для этого надо было добавить следующую строчку кода в main:
Блин. Все-таки стоит ассистент читать внимательно. Вот эта фраза помогла сделать правильное переопределение на нужный виджет функции keyEventPress: Цитата void QWidget::keyPressEvent ( QKeyEvent * event ) [virtual protected] This event handler, for event event, can be reimplemented in a subclass to receive key press events for the widget. A widget must call setFocusPolicy() to accept focus initially and have focus in order to receive a key press event. If you reimplement this handler, it is very important that you ignore() the event if you do not understand it, so that the widget's parent can interpret it. The default implementation closes popup widgets if the user presses Esc. Otherwise the event is ignored. Вызвал функцию setFocusPolicy , что и помогло. Фильтр событий вообще не понадобился.
|
|
|
Текстовая версия | Сейчас: 30.11.2024, 18:17 |