Название: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 10:35 Добрый день.
В общем нужно отловить нажатие мыши в любом месте и на любой виждет на форме. Как сделать ? Через слот - сигналы ? Флаги или эвент ? Т.е. грубо говоря по нажатию мыши я должен иметь хоть какую-то информацию об этом нажатии - позиция (координаты) относительно главной формы или же информация о том на какой виджет я кликнул. Пробовал бурить EventFilter. mainwindow.h Код: ... Код: ui->centralWidget->installEventFilter(this); Код: bool MainWindow::eventFilter(QObject *obj, QEvent *event) Если в конструкторе прописываю напрмер mainwindow.cpp в конструкторе Код: ui->QTableView_obj->installEventFilter(this); Название: Re: Отловить нажатие мыши Отправлено: Bepec от Апреля 10, 2012, 10:37 Я фшоке. Неужто ты всё запихал в main.cpp?
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 10:41 Я фшоке. Неужто ты всё запихал в main.cpp? извеняюсь )писал от руки код) mainwindow все файлы Название: Re: Отловить нажатие мыши Отправлено: Alex Custov от Апреля 10, 2012, 11:31 qApp->installEventFilter установит фильтр глобально, там и отлавливай.
Название: Re: Отловить нажатие мыши Отправлено: GreatSnake от Апреля 10, 2012, 12:02 Либо перегрузи:
Код
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 12:43 qApp->installEventFilter установит фильтр глобально, там и отлавливай. Разворачивается главная форма - и она просто пустая, ни одного виджета на ней не отобразилось.Либо перегрузи: такая же история - нет виджетов.Код
Название: Re: Отловить нажатие мыши Отправлено: Странник от Апреля 10, 2012, 13:01 скорее всего, eventFilter неправильно написали - события дальше не передаются. попробуйте
Код: return false; Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 13:06 скорее всего, eventFilter неправильно написали - события дальше не передаются. попробуйте Хмм ну да )Код: return false; Я писал наоборот Код: return true; Не разобрался правда с Либо перегрузи: попробывал и Код
Код: return false; Название: Re: Отловить нажатие мыши Отправлено: V1KT0P от Апреля 10, 2012, 13:16 qApp->installEventFilter установит фильтр глобально, там и отлавливай. Разворачивается главная форма - и она просто пустая, ни одного виджета на ней не отобразилось.Либо перегрузи: такая же история - нет виджетов.Код
Попробовал ловит отлично(в данном случае переименовывает все кнопки): Код
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 13:20 qApp->installEventFilter установит фильтр глобально, там и отлавливай. Разворачивается главная форма - и она просто пустая, ни одного виджета на ней не отобразилось.Либо перегрузи: такая же история - нет виджетов.Код
Попробовал ловит отлично(в данном случае переименовывает все кнопки): Код
Код: bool QApplication::notify(QObject *obj, QEvent *event) Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 13:22 notify родительского класса стоит вызвать
Название: Re: Отловить нажатие мыши Отправлено: V1KT0P от Апреля 10, 2012, 13:25 Всех. Есть главная форма, её заголовок и всё. причём сама функция внутри пустая у меня У меня ловит даже то о чем я и не подозревал(плюс еще какие-то безымянные объекты):Цитировать "Test_Widget_Click" Что ты хочешь сделать я не пойму?"windowsxp" "qt_rubberband" "qt_toolbar_ext_button" "Qt internal tablet widget" "xp_limbo_widget" "xp_limbo_widget" "centralWidget" "pushButton" "pushButton_2" "pushButton_3" "menuBar" "mainToolBar" "statusBar" "MainWindow" Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 13:31 notify родительского класса стоит вызвать QWidget?QWainWindow? У них нету данной функции. Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 13:36 notify родительского класса стоит вызвать QWidget?QWainWindow? У них нету данной функции. Код: bool QApplication::notify(QObject *obj, QEvent *event) Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 13:37 Всех. Есть главная форма, её заголовок и всё. причём сама функция внутри пустая у меня У меня ловит даже то о чем я и не подозревал(плюс еще какие-то безымянные объекты):Цитировать "Test_Widget_Click" Что ты хочешь сделать я не пойму?"windowsxp" "qt_rubberband" "qt_toolbar_ext_button" "Qt internal tablet widget" "xp_limbo_widget" "xp_limbo_widget" "centralWidget" "pushButton" "pushButton_2" "pushButton_3" "menuBar" "mainToolBar" "statusBar" "MainWindow" при помощи Код: MainWindow::MainWindow(QWidget *parent) : а если вызываю Код: bool QApplication::notify(QObject *obj, QEvent *event) Название: Re: Отловить нажатие мыши Отправлено: V1KT0P от Апреля 10, 2012, 13:39 Пустая форма В аттаче проект, посмотри его, запусти. И если все также непонятно, то объясни что именно.Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 13:45 Пустая форма В аттаче проект, посмотри его, запусти. И если все также непонятно, то объясни что именно.Всем спасибо. Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 13:46 Пустая форма В аттаче проект, посмотри его, запусти. И если все также непонятно, то объясни что именно.Всем спасибо. А как ты вообще собирался переопределять метод без наследования? Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:03 Пустая форма В аттаче проект, посмотри его, запусти. И если все также непонятно, то объясни что именно.Всем спасибо. А как ты вообще собирался переопределять метод без наследования? Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:07 Столкнулся со следующей проблемой. События то я получаю типа QEvent, и определяю что это нажатие мыши. А вот координат в QEvent нету:(
Можно ли имея Event и зная что это QMouseEvent узнать непосредственно координаты курсора? Или просто в момент когда будит поймано событие Event узнать координаты мыши на момент, совершения Event'а? Название: Re: Отловить нажатие мыши Отправлено: V1KT0P от Апреля 10, 2012, 14:11 Столкнулся со следующей проблемой. События то я получаю типа QEvent, и определяю что это нажатие мыши. А вот координат в QEvent нету:( Ну дык используй qobject_cast как в примере что я выложил.Можно ли имея Event и зная что это QMouseEvent узнать непосредственно координаты курсора? Или просто в момент когда будит поймано событие Event узнать координаты мыши на момент, совершения Event'а? Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:18 Столкнулся со следующей проблемой. События то я получаю типа QEvent, и определяю что это нажатие мыши. А вот координат в QEvent нету:( Ну дык используй qobject_cast как в примере что я выложил.Можно ли имея Event и зная что это QMouseEvent узнать непосредственно координаты курсора? Или просто в момент когда будит поймано событие Event узнать координаты мыши на момент, совершения Event'а? но не пойму чем мне поможет функция, возвращающая ссылку на объект по его имени ? Или я что-то не так понял ?:) Название: Re: Отловить нажатие мыши Отправлено: Bepec от Апреля 10, 2012, 14:21 Код: QMouseEvent* myEvent = qobject_cast<QMouseEvent*>(event); Как то так, возможно неверно, написано на тополе. Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:23 Столкнулся со следующей проблемой. События то я получаю типа QEvent, и определяю что это нажатие мыши. А вот координат в QEvent нету:( Ну дык используй qobject_cast как в примере что я выложил.Можно ли имея Event и зная что это QMouseEvent узнать непосредственно координаты курсора? Или просто в момент когда будит поймано событие Event узнать координаты мыши на момент, совершения Event'а? Вопрос немножко не по теме. Если я опишу свой класс. Объявлю два объекта этого класса, допусти в двух вдругих классах, и имена им дам одинаковые. Эта функция вернёт оба этих объекта ? :) Название: Re: Отловить нажатие мыши Отправлено: V1KT0P от Апреля 10, 2012, 14:23 Код: QMouseEvent* myEvent = qobject_cast<QMouseEvent*>(event); Как то так, возможно неверно, написано на тополе. Код
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:26 Код: QMouseEvent* myEvent = qobject_cast<QMouseEvent*>(event); Как то так, возможно неверно, написано на тополе. Код: QMouseEvent * ev = qobject_cast <QMouseEvent *>(event); Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:28 Код: QMouseEvent* myEvent = qobject_cast<QMouseEvent*>(event); Как то так, возможно неверно, написано на тополе. Код
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:31 Всё получилось - спасибо большое V1KT0P!
И просто замечательно что я познакомился с функциями static_cast и qobject_cast :) Название: Re: Отловить нажатие мыши Отправлено: kambala от Апреля 10, 2012, 14:53 И просто замечательно что я познакомился с функциями static_cast было бы просто замечательно, если бы знакомство начинали с С++, а не сразу бежали окошки рисоватьНазвание: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 14:56 И просто замечательно что я познакомился с функциями static_cast было бы просто замечательно, если бы знакомство начинали с С++, а не сразу бежали окошки рисоватьЯ бы сам рад - сначала изучить на твёрдую пятёрку плюсы, потом буравить Qt, но увы... времени и на изучение одного и реализацию в другом не хватает. Приходиться навёрстывать по пути. Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 15:28 Ну дык используй qobject_cast как в примере что я выложил. А вообще очень интересная функция =)Вопрос немножко не по теме. Если я опишу свой класс. Объявлю два объекта этого класса, допусти в двух вдругих классах, и имена им дам одинаковые. Эта функция вернёт оба этих объекта ? :) Щито?? какая связь между именами объектов и qobject_cast? Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 15:46 Returns the given object cast to type T if the object is of type T
Код: Example: Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 15:56 Ну вообще-то она приводит объект к типу, если объект действительного этого типа. А уж никак не возвращает объект по имени...
Название: Re: Отловить нажатие мыши Отправлено: bez_glaz от Апреля 10, 2012, 16:03 Ну вообще-то она приводит объект к типу, если объект действительного этого типа. А уж никак не возвращает объект по имени... Не буду спорить, я уже знаю где я опробую данную функцию и отпишусь тут по результатам моих тестов:)Название: Re: Отловить нажатие мыши Отправлено: mutineer от Апреля 10, 2012, 16:07 Ну вообще-то она приводит объект к типу, если объект действительного этого типа. А уж никак не возвращает объект по имени... Не буду спорить, я уже знаю где я опробую данную функцию и отпишусь тут по результатам моих тестов:)Ну опробуй, раз не хочешь осознать написанное в доке... |