Определить событие мыши: наведите указатель мыши на родительский элемент для дочернего виджета.

У меня есть 2 виджета, родительский и дочерний виджет:

введите здесь описание изображения

Имея доступ к реализации виджета red, можно ли определить момент наведения курсора из виджета red в виджет blue без реализации каких-либо обработчиков событий или наследования виджета blue?

Красная область имеет четко определенную толщину (например, 5 пикселей).


person Jacob Krieg    schedule 07.10.2014    source источник
comment
что вы хотите сделать с этой информацией? Если вы хотите изменить только внешний вид виджета, тогда setStyleSheet должен выполнить эту работу.   -  person Marek R    schedule 07.10.2014
comment
мне не нужна только внешность. мне нужно, чтобы курсор менялся, когда мышь входит и покидает область. проблема в том, что когда курсор покидает область, я хочу сбросить его до прежней формы   -  person Jacob Krieg    schedule 07.10.2014
comment
поэтому просто установите свойство курсора для обоих виджетов.   -  person Marek R    schedule 07.10.2014
comment
Я понимаю, но мне нужен другой курсор для каждого края. эта функция очень удобна, но она предоставит мне только один тип курсора. Я хотел бы, чтобы красная область была границей, с помощью которой вы можете изменить размер окна   -  person Jacob Krieg    schedule 07.10.2014
comment
для такой функциональности я бы добавил отдельный виджет для каждого края и объединил бы его только визуально.   -  person Marek R    schedule 07.10.2014
comment
это было бы слишком болезненно... потребовалось бы 8 виджетов (4 по краям и 4 по углам), я надеялся на лучший подход   -  person Jacob Krieg    schedule 07.10.2014


Ответы (2)


ИМХО, вы не можете поймать переход, не перехватив одно событие перемещения мыши из красного виджета и одно событие перемещения мыши из синего виджета, поскольку мышь может прыгать по экрану и может не двигаться непрерывно.

person dom0    schedule 07.10.2014

Без вывода: используйте фильтр событий, тип QEvent — HoverEnter и HoverLeave.

С таблицей стилей

QWidget:hover{}
person Kosovan    schedule 07.10.2014
comment
Пробовал if(event->type() == QEvent::HoverEnter) { qDebug() << "Hover enter"; } внутри QWidget::event для красного виджета, но ничего не показывает... - person Jacob Krieg; 07.10.2014
comment
@JacobKrieg Я дал много ответов с фильтрами событий на SO. Поэтому, пожалуйста, проверьте один из этих ответов: stackoverflow.com/questions/26041471/ Здесь описывается, как установить фильтр и использовать его. Попробуй. Это работа? - person Kosovan; 07.10.2014
comment
Я бы не стал использовать фильтры событий, потому что хотел бы, чтобы он работал, не зная, как называется синий... qwidget. Я хотел бы, чтобы синий qwidget настраивался пользователем и позволял ему добавлять его... я вижу, что подход к фильтру событий немного хакерский... - person Jacob Krieg; 07.10.2014
comment
@JacobKrieg, если это виджет, вы можете установить специальное имя объекта, и когда вы обнаружите, что какой-то объект в фильтре событий имеет это специальное имя (вы знаете это имя, вы устанавливаете это имя, а не пользователь), тогда вы знаете, что это виджет, который вы необходимость. - person Kosovan; 07.10.2014