Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ¤Se®ega¤ от Май 01, 2009, 14:13



Название: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 14:13
При наведении курсора мыши на объект должно произойти изменение параметров объекта, наприер при наведении на Qlabel-появяется рамка( setFrameShadow(QFrame::Plain) ).Как это реализовать? Использовать mouseMoveEvent(QMouseEvent)? setMouseTracking(TRUE) уже установил.


Название: Re: Ответ насобытие мыши.
Отправлено: Пантер от Май 01, 2009, 14:30
Да. Переопределить mouseMoveEvent(QMouseEvent) и в нем проводить действие.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 14:39
Так как мне переопределить это событие только для объектов класса QLabel?У меня на форме много разных обектов, кроме label.Как именно мне отловить перемещение над label я не понимаю :-\


Название: Re: Ответ насобытие мыши.
Отправлено: gueRRero от Май 01, 2009, 15:23
Как вариант, создать свой класс, унаследованный от QLabel, в нем переопределить соответствующие события и на форме использовать именно его.
Может быть, можно и как-то по-другому.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 15:41
допустим я так сделаю, а не будет ли так, что я добавлю несколько объектов этого класса на форму и при наведении у них у ВСЕХ будут меняться параметры сразу?


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 15:48
Можно сделать еще с фильтром, но там придется писать для каждого компонента.


Название: Re: Ответ насобытие мыши.
Отправлено: lit-uriy от Май 01, 2009, 16:16
>>я добавлю несколько объектов этого класса на форму и при наведении у них у ВСЕХ будут меняться параметры сразу?
Это из области С++
каждый объект - экземпляр класса - будет сам по себе.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 16:54
Да, спасибо,я  уже понял, это я с фильтром думал.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 18:03
Еще не подскажете?Я при навдении курсора делаю рамку у Label,после того как курсор вышел за пределы Label рамка, естественно остается.Как лучше от неё избавиться?Фильтр,таймер, переопределение mousemove на родительском виджете(но тут надо будет изменять состояние для всех унаследованных от Label класса объектов),по координатам мыши (пару-тройку пикселей по краям Label? при попадании на которые рамка будет исчезать), может еще что?


Название: Re: Ответ насобытие мыши.
Отправлено: gueRRero от Май 01, 2009, 18:38
Если не ошибаюсь, void QWidget::leaveEvent(QEvent* event) должно помочь.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 18:40
Тогда может вообще сделать не через mouseMove, а через enterEvent и leaveEvent?


Название: Re: Ответ насобытие мыши.
Отправлено: gueRRero от Май 01, 2009, 18:41
Да, я думаю, что так будет и логичнее и проще.


Название: Re: Ответ насобытие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 18:46
Уже сделал.Спасибо.А что касательно загрузки изображения в Label, это не хуче чем использование QImage и QPixmap? или всеже лучше грузить через QImage и QPixmap?


Название: Re: Ответ на событие мыши.
Отправлено: gueRRero от Май 01, 2009, 18:53
Вот это лучше спросить у наших гуру. Я думаю, что это не принципиально, ибо все равно в QLabel картинка ставится через setPixmap.


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 01, 2009, 18:56
Ну я предполагаю что если добавить кнопку, на которую через setIcon так-же добавить картитнку, будет грузиться таким же образом, но от такого рода отображения картинок мой руководитель отказался.


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 02, 2009, 10:58
И еще такой вопрос: теперь у меня на форме несколько label-ов,как мне свяать нажатие определенного label-а с определенным слотом???С учетом того, что label-объект класса, унаследованного от QLabel, в котором переопределены 4 события: leaveEvent,ebterEvent,mousePressEvent,mouseReleaseEvent.


Название: Re: Ответ на событие мыши.
Отправлено: Авварон от Май 02, 2009, 11:19
а разве рамку нельзя сделать через стили? недавно тема была про нестандартный стиль кнопок - там при наведении на кнопку появлялась рамка

2 ¤Se®ega¤ добавь свой сигнал и делай emit его в либо mouse press либо mouse release. А затем кучу коннектов для лейлов. Или я не так вопрос понял?


Название: Re: Ответ на событие мыши.
Отправлено: lit-uriy от Май 02, 2009, 11:22
>>как мне свяать нажатие определенного label-а с определенным слотом???
Если следовать задаче из первого сообщения, то я не вижу необходимости в сигналах и слотах.
Так как ты переопределил обработчики событий, то и реализуй необходимые действия в этих обработчиках.


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 02, 2009, 11:30
Так все дело то в том, что для каждого label свой метод.


Название: Re: Ответ на событие мыши.
Отправлено: lit-uriy от Май 02, 2009, 11:35
2 ¤Se®ega¤, я думаю будет лучше если ты опишешь исходную задачу более подробно. Иначе игра в угадайку не даст пользы ни тебе ни другим.


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 02, 2009, 11:44
на форме есть несколько обектов класса Qlabel? в которые я загружаю картинки(разные),при наведении,нажатии (отпускании кнопки мыши)на обект должны происходить какие-либо действия.Например навели-появилась рамка, нажали-смесились на пиксел вниз и вправо, отпустили-сместились на пиксел вверх и вправо.Помимо этого необходимо еще сделать так, чтобы при нажатии на каждую картинку - происходило определенное действие.Например нажали на первую картинку - форма свернулась, на другуя - закрылась.


Название: Re: Ответ на событие мыши.
Отправлено: lit-uriy от Май 02, 2009, 12:03
2 ¤Se®ega¤, я неспроста попросил подробностей. Пэтому и выкладывай их все. Одна программа (не один класс) содержит множество различных методов. Я попробую прочитать твои мысли:
Нужен виджет - кнопка с картинкой, возможно с подписью.
Наведение мыши выделяет объект.
Начатие должно выглядеть как кнопка.
По нажатию что-то происходит.

Я бы использовал QPushButton + стили (см. сообщение Авварон'а)


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 02, 2009, 12:14
от QPushButton отказались,поэтому использую Label.Если уж совсем подробно: Есть программа, в которой несколько форм.На каждой есть некоторые "кнопки",реализованные через QLabel и содержащие изображения (при помощи этих объектов осуществляется переход между формами, либо просто отображение некоторых форм).Так же на форме есть объекты Qlabel, содержащие изображения, но как "кнопки" не действующие (при наведении на них будет выдаваться информация в виде комментариев).Изоюражения на "кнопках" можно будет изменить через контекстное меню.


Название: Re: Ответ на событие мыши.
Отправлено: ¤Se®ega¤ от Май 02, 2009, 12:48
Спасибо Авварон,lit-uriy.
Сделал через сигнал (в переопределении releaseEvent делал emit? а после через connect)юВсе отлично работает.