Название: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 11, 2009, 20:22 Здравствуйте!
такой вопрос, я хочу чтобы какието элементы моего интерфейса были видны только в тот момент когда на них наведен указатель мыши, а в других случаях нет. подскажите как можно отслеживать положение курсора в виджете? пробовал virtual void mouseMoveEvent(QMouseEvent* pe) { if(((pe->x() >=120) && (pe->x() <= 139)) && ((pe->y() >= 134) && (pe->y() <= 204))) volumeSlider->setVisible(true); else volumeSlider->setVisible(false); if(((pe->x() >=88) && (pe->x() <= 164)) && ((pe->y() >= 230) && (pe->y() <= 250))) seekSlider->setVisible(true); else seekSlider->setVisible(false); } но тогда элементы видны только если нажать на них и подвигать мышью, как при перетаскивании Название: Re: определение положения курсора Отправлено: Alex Custov от Декабря 11, 2009, 20:28 Здравствуйте! такой вопрос, я хочу чтобы какието элементы моего интерфейса были видны только в тот момент когда на них наведен указатель мыши, а в других случаях нет. подскажите как можно отслеживать положение курсора в виджете? пробовал setMouseTracking(true) установлен? Название: Re: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 11, 2009, 20:30 нет...
все прочитал про этот метод))) спс большое)) Название: Re: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 11, 2009, 20:52 теперь другая проблема))
перетаскивание окна у меня было сделано так virtual void mousePressEvent(QMouseEvent* pe) { m_ptPosition = pe->pos(); } virtual void mouseMoveEvent(QMouseEvent* pe) { move(pe->globalPos() - m_ptPosition); ... и теперь как только я попадаю на окно, оно тут же перемещается)) окно у меня class MainWindow : public QLabel подскажите как исправить)) Название: Re: определение положения курсора Отправлено: Павел_F. от Декабря 11, 2009, 21:26 Код: bool moveEnable = false; Или: Код: virtual void mousePressEvent(QMouseEvent* pe) Название: Re: определение положения курсора Отправлено: spectre71 от Декабря 11, 2009, 21:27 теперь другая проблема)) перетаскивание окна у меня было сделано так virtual void mousePressEvent(QMouseEvent* pe) { m_ptPosition = pe->pos(); } virtual void mouseMoveEvent(QMouseEvent* pe) { move(pe->globalPos() - m_ptPosition); ... и теперь как только я попадаю на окно, оно тут же перемещается)) окно у меня class MainWindow : public QLabel подскажите как исправить)) Обрабатывай: virtual void mouseReleaseEvent ( QMouseEvent * event Название: Re: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 11, 2009, 22:20 Павел_F пробовал оба варианта, в первом случае ничего не меняется, окно так и скочит от курсора, а во втором случае не работает перетаскивание...
Цитировать И у события accept нужно вызывать, ну или ignore чтобы стандартный обработчик тоже отработал нормально. несовсем понялесть конечно вариант что у меня просто ручки кривые, т.к. это первая моя програма на Qt и я пока что не оч разбираюсь, но вроде бы тут негде накосячить) кстати подскажите плз что делает mouseReleaseEvent, в асистансе чего то непонятно написано ps спасибо за оперативную помощ, отличный сайт! :) Название: Re: определение положения курсора Отправлено: Павел_F. от Декабря 11, 2009, 23:30 mousePressEvent событие, которое возникает при нажатии кнопки мыши, mouseRaleaseEvent когда отпускают. Заметьте любой из кнопок.
Кроме вашего обработчика события есть еще стандартный, он тоже нужен. Конкретно в этой задаче можно и обойтись, но в принципе это может привести к нехорошим результатам. И лучше писать как реагировать на событие( accept, ignore). Про первый вариант. если хотели перетаскивать плавно то координаты считаете не правильно. Надо не Код: m_ptPosition = pe->pos(); Код: m_ptPosition = pe->globalPos() - frameGeometry().topLeft(); Вот как-то так, прыгать должен перестать. Не думал я сначала о правильности ваших расчетов. Да и какую именно кнопку нажали тоже смотреть нужно. Например, в этом коде, если зажать и левую и правую а потом тащить и отпустить одну из них то перетаскивание завершится, что не совсем правильно логически. А второй у меня работает. С координатами тоже также как у первого. Если вы его совсем не правили то там ошибка есть, я копировал из своего кода и название события поменять на ваше забыл. если дело не в этом то ищите у себя другие ошибки, код работает. Название: Re: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 12, 2009, 01:39 ну такую ошибку пропустить тяжело, да и нескомпилился бы код)
спс за совет, учту. буду разбиратся что не так))) уряяя)) сделал все как надо и заодно терь в событиях разобрался, покрайней мере мыши))))) всем большое спс за помощ! Название: Re: определение положения курсора Отправлено: SASA от Декабря 15, 2009, 11:18 virtual void mouseMoveEvent(QMouseEvent* pe) По-моему, использовать магические константы плохо. Я бы сделал окошки прозрачными, и при наведении на них мышкой делел бы их непрозрачными. При выходе мышки - опять прозрачными.{ if(((pe->x() >=120) && (pe->x() <= 139)) && ((pe->y() >= 134) && (pe->y() <= 204))) volumeSlider->setVisible(true); else volumeSlider->setVisible(false); if(((pe->x() >=88) && (pe->x() <= 164)) && ((pe->y() >= 230) && (pe->y() <= 250))) seekSlider->setVisible(true); else seekSlider->setVisible(false); } Название: Re: определение положения курсора Отправлено: Lee Harvey Oswald от Декабря 16, 2009, 22:21 я в точности так и сдела))
|