crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> События мыши
Trisch
  опции профиля:
сообщение 28.2.2012, 4:58
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Имеется сцена и на ней дочерние виджеты. При нажатии мышкой на сцене "события мыши работают", а при нажатии на дочерном виджете, нет.

вот код "событий мыши"
void MainWindow::mousePressEvent(QMouseEvent *pEvent)
{
    double ex, ey;

    QPointF pPoint = graphicsView->mapToScene(pEvent->x() - 17, pEvent->y() - 9 );

    ex = pPoint.x();
    ey = pPoint.y();

...
}


Как заставить работать "события мыши" при нажатии на дочерний виджет?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 28.2.2012, 6:30
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Это потому, что дочерний виджет сам обрабатывает это событие.
Для отлова таких событий можно использовать механизм eventFilter. В документации ищется по методу installEventFilter, подробно все расписано с примерами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 8.3.2012, 1:20
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Цитата(BRE @ 28.2.2012, 7:30) Link
Это потому, что дочерний виджет сам обрабатывает это событие.
Для отлова таких событий можно использовать механизм eventFilter. В документации ищется по методу installEventFilter, подробно все расписано с примерами.


ну я применил данный метод вот таким вот образом:
...
QGraphicsItem *pItem;
...
pEllipseItem->installSceneEventFilter(pItem);
...
bool MainWindow::sceneEventFilter(QGraphicsItem *pItem, QEvent *pEvent)
{
    if(pItem == pEllipseItem)
    {
        if(pEvent->type() == QEvent::MouseButtonPress)
        {
            return true;
        }
    }
    return MainWindow::sceneEventFilter(pItem, pEvent);
}


В итоге программа неожиданно завершается, при этом не выдает ни каких ошибок. Что тут не так?

P.s. в строчке "pEllipseItem->installSceneEventFilter(pItem);" я pItem влепил, скорее всего наугад, чем из логических соображений(((


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 8.3.2012, 1:31
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


installEventFilter, а не installSceneEventFilter
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Trisch
  опции профиля:
сообщение 8.3.2012, 1:38
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

Спасибо сказали: 24 раз(а)




Репутация:   0  


Цитата(RazrFalcon @ 8.3.2012, 2:31) Link
installEventFilter, а не installSceneEventFilter


при использовании installEventFilter выдает ошибку: error: 'class QGraphicsEllipseItem' has no member named 'installEventFilter'

и как я прочитал в документации эти функции, вроде, аналогичные, ток применяются к различным виджетам. Ну может я что-то не так понял(((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 8.3.2012, 2:12
Сообщение #6


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Так вам нужно отловить где? На виджете или на Graphic итеме?
Что вы вообще хотите сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.12.2025, 11:55