Название: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: gil9red от Июнь 26, 2015, 09:39 На окошке рисуется прямоугольник, который можно перемещать мышкой.
Перемещение может быть: свободным и с привязкой к сетке Вот с привязкой к сетке у меня фигня выходит -- прямоугольник прикрепляется, но после начала движения прямоугольник тянется не за ту точку, в которую мы тыкнули на нем, а примерно верхний левый угол. Это особенно заметно, когда за нижний правый угол его хватает, перемещаешь, и он притягивается к курсору в верхнему правому углу, а после привязывается к ближайшей стороне ячейки сетки Как сделать, чтобы работало хорошо? :) При свободном перемещении такого нету Алгоритм перемещения прямоугольника по форме: Код
Минимально-компилябельный пример приложен Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: Igors от Июнь 26, 2015, 09:55 Не проверял, но по-моему правильно иак
Код И вообще, давно пора решать задачи посложнее :) Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: gil9red от Июнь 26, 2015, 09:57 Не проверял, но по-моему правильно иак Код И вообще, давно пора решать задачи посложнее :) не работает :) Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: __Heaven__ от Июнь 26, 2015, 10:15 К сожалению, нет времени на попытки поиграть с этой задачей.
Имхо, lastPos нужно сохранять при клике. При смене позиции рамки перезаписывать lastPos. Только это заметил. Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: gil9red от Июнь 26, 2015, 10:21 К сожалению, нет времени на попытки поиграть с этой задачей. Имхо, lastPos нужно сохранять при клике. При смене позиции рамки перезаписывать lastPos. Только это заметил. Точно! Вы правы :) Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: Igors от Июнь 26, 2015, 12:47 Народная примета: исходная точка (с которой начался драг) должна храниться неизменной, иначе драг "уползет". Ладно, "побалуемся плюшками" :) (аттач) Пришлось заменить posF на localPos (версия новее)
Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: gil9red от Июнь 26, 2015, 12:59 Народная примета: исходная точка (с которой начался драг) должна храниться неизменной, иначе драг "уползет". Ладно, "побалуемся плюшками" :) (аттач) Пришлось заменить posF на localPos (версия новее) О, спасибо! Заработало :) Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: __Heaven__ от Июнь 26, 2015, 13:34 Кстати, я не понял, зачем использовать float... Координаты экрана, ведь, в int. И там, где вы x и y высчитываете, они тоже должны быть int, имхо.
Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: gil9red от Июнь 26, 2015, 13:39 Кстати, я не понял, зачем использовать float... Координаты экрана, ведь, в int. И там, где вы x и y высчитываете, они тоже должны быть int, имхо. По условию задачи :) Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: Igors от Июнь 26, 2015, 13:45 . Координаты экрана, ведь, в int Уже нет, во всяком случае - не везде. (Получил за это когда переходил на какаву)Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: __Heaven__ от Июнь 26, 2015, 14:08 Опа. А где они во float?
Название: Re: Перемещение и привязка прямоугольника на форме (QWidget) Отправлено: Igors от Июнь 26, 2015, 14:32 Опа. А где они во float? Ну хотя бы в QMouseEvent. Напр предположение что QCursor::pos() возвращает то же самое значение что и в QMouseEvent (до тех пока мышь не передвинулась) оказалось неверным т.к. Mac OSX выдает флоты которые округляются по-разному. |