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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListView координаты мыши при клике на элемент  (Прочитано 6026 раз)
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.056 секунд. Запросов: 20.