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)юВсе отлично работает.