Russian Qt Forum
Июня 30, 2025, 23:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListView координаты мыши при клике на элемент  (Прочитано 6291 раз)
Leviathan
Гость
« : Сентября 27, 2010, 21:23 »

Привет всем!
Имеется QListView в котором делегат рисует элементы списка.
Как сделать так что бы при клике на элемент списка срабатывала функция, которая бы принимала координаты мыши?
Вариант со своим editor'ом который бы отображался всегда для всех элементов не подойдет, т.к. элементов тысячи, и скорость очень важна. Конечная цель - нарисовать пару маленьких прямоугольников прямо в элементе списка при нажатии на которые, срабатывали бы соответствующие события.
Записан
crossly
Гость
« Ответ #1 : Сентября 27, 2010, 21:48 »

mousePressEvent
Записан
Leviathan
Гость
« Ответ #2 : Сентября 27, 2010, 22:15 »

Ок, это все некрасиво получается, если mousePressEvent ловить у самого QListView
Записан
Leviathan
Гость
« Ответ #3 : Сентября 28, 2010, 18:51 »

значит ответа нет...
Записан
MoPDoBoPoT
Гость
« Ответ #4 : Сентября 28, 2010, 20:57 »

Ок, это все некрасиво получается, если mousePressEvent ловить у самого QListView
Вообще-то еще есть installEventFilter().
Можно еще соединить сигнал QAbstractItemView::clicked(QModelIndex &) со слотом в котором координаты мыши получить через QCursor::pos()
Записан
crossly
Гость
« Ответ #5 : Сентября 28, 2010, 21:47 »

вполне возможно что пока дойдет до слота курсора в нужно месте уже не будет...
Записан
Leviathan
Гость
« Ответ #6 : Сентября 28, 2010, 22:35 »

Вообще-то еще есть installEventFilter().
Можно еще соединить сигнал QAbstractItemView::clicked(QModelIndex &) со слотом в котором координаты мыши получить через QCursor::pos()

Проблема в том что нужно определить координаты относительно самого элемента списка, расчитывать их магией очень сложно, и будет очень криво.
Единственное что пока удалось, так это определить в каком конкретно элементе происходит клик:
Код:
void MyListView::mouseClickEvent(QMouseEvent *event)
{
   QAbstractItemModel *m(model());
   if(m)
      QModelIndex index = indexAt(event->pos());
   QListView::mouseClickEvent(event);
}
Записан
Kolobok
Гость
« Ответ #7 : Сентября 29, 2010, 09:31 »

Это ты QAbstractItemView::clicked( const QModelIndex & index ) изобрел.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.023 секунд. Запросов: 19.