crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Как отловить наведение мышки на item QListWidget'a?
RazrFalcon
  опции профиля:
сообщение 4.8.2011, 5:15
Сообщение #1


Zombie Mod
*****

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

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




Репутация:   212  


Нужно отловить сигнал, который бы испускался при наведении мыши на итем листа.

Нашел только:
itemEntered(QListWidgetItem*)

Пробовал так:
//конструктор
{
...
listWidget->viewport()->setMouseTracking(true);
connect(listWidget,SIGNAL(itemEntered(QListWidgetItem*)),this,SLOT(itemEntered(QListWidgetItem*)));
...
}

void MainWindow::itemEntered(QListWidgetItem* index)
{
  qDebug()<<listWidget->row(index);
}

Ничего. Срабатывает только при скролинге колесиком мыши.

Так же пробовал mouseMoveEvent() у итемов, но я не пойму как понять что мышка вышла за пределы итема.

То есть мне нужен сигнал на наведение мышкой на итем, затем, когда мы мышку убрали, появляется новый сигнал, мол убрали.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.8.2011, 7:06
Сообщение #2


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


наверное, поможет:

определение вхождения-выхода:
virtual void    enterEvent ( QEvent * event )
virtual void    leaveEvent ( QEvent * event )


включение всех событий движения мыши
void    setMouseTracking ( bool enable )


это всё относительно виджета QListWidget , определять же, какие элементы под курсором при движении -

QListWidgetItem *    itemAt ( const QPoint & p ) const
QListWidgetItem *    itemAt ( int x, int y ) const


Сообщение отредактировал Алексей1153 - 4.8.2011, 7:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.8.2011, 15:08
Сообщение #3


Zombie Mod
*****

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

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




Репутация:   212  


Ну если я правильно понял...
Я сделал наследника QListWidget, затем в нем предопределил mouseMoveEvent, включил setMouseTracking(true);.
Но позиция в консоль выводится только при нажатии мыши.
void MyListWidget::mouseMoveEvent(QMouseEvent *e)
{
  e->accept();
  qDebug()<<e->pos();
}

При том что enterEvent срабатывает отлично.


Сделал через enter и leave эвенты. Работает так как надо. Но хотелось бы понять и то что выше.

Сообщение отредактировал RazrFalcon - 4.8.2011, 15:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.8.2011, 18:16
Сообщение #4


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата
предопределил

ПЕРЕопределил :)

насчёт mouseMoveEvent - у меня нет на ноуте сейчас Qt, не могу попробовать.

А зачем, кстати, делаешь e->accept() ? Вроде надо функцию родителя вызывать

void MyListWidget::mouseMoveEvent(QMouseEvent *e)
{
  QListWidget::QListWidget(e);
  qDebug()<<e->pos();
}


Сообщение отредактировал Алексей1153 - 4.8.2011, 18:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 4.8.2011, 18:18
Сообщение #5


Zombie Mod
*****

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

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




Репутация:   212  


Да ради интереса, оно и с ним и без него не пашет. Но это уже не существенно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.8.2011, 18:18
Сообщение #6


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

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


странно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.12.2024, 21:14