Отрисовка линий по нажатию кнопки мыши, Измерение растояний |
Здравствуйте, гость ( Вход | Регистрация )
Отрисовка линий по нажатию кнопки мыши, Измерение растояний |
myr |
29.9.2009, 14:50
Сообщение
#1
|
Студент Группа: Участник Сообщений: 37 Регистрация: 4.9.2009 Из: С-Пб Пользователь №: 1052 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здраствуйте. Посоветуйте. Ничего не знаю но сделать надо.
Выделить область окна по нажатию кнопки мышки. Мышкой щелкнули - потянулась линия, второй раз одна сохранилась вторая от нее началась, как измерение маршрута в топ плане. после полного выделения все стереть. Надо при обработке mouse event, вызывать paint? как сохранить преведущую линию между отрисовками? как все стереть потом? Или отошлите на пример. Спасибо. |
|
|
kwisp |
29.9.2009, 15:02
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
мало что понял из вопроса.
П.С. ключи для поиска в ассисетенте и на форуме paintEvent qpainter mouseEvent |
|
|
myr |
29.9.2009, 15:13
Сообщение
#3
|
Студент Группа: Участник Сообщений: 37 Регистрация: 4.9.2009 Из: С-Пб Пользователь №: 1052 Спасибо сказали: 0 раз(а) Репутация: 0 |
Есть изображение.
Щелкнули мышкой. При перемешении курсора и нажатой кнопке мыши тянется линия. Одним концом линия закреплена на месте нажатия кнопки мыши. Перемещаетьс туда, куда двигаеться курсор. Не понимаю как ее отрисовывать и стирать. |
|
|
kwisp |
29.9.2009, 15:52
Сообщение
#4
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
переопределяешь paintEvent в классе наследнике от QPaintDevice(QWidget, QImage, QPixmap etc.) в нем же заводишь член класса -- координата последнего нажатия мыши(может список координат нажатий при рисовании ломанной линии) в переопределенном paintEvent рисуешь линию от сохранненой координаты до текущего положения мыши, в событии движения мыши mouseMove вызываешь update().
основная идея такая. |
|
|
myr |
29.9.2009, 20:59
Сообщение
#5
|
Студент Группа: Участник Сообщений: 37 Регистрация: 4.9.2009 Из: С-Пб Пользователь №: 1052 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо. Понятно.
Как удалить нарисованную линию? После отрисовки всего полинома?. Отрисовали пользователь посмотрел - стал рисовать нову старая затерлась. Или сама пропадет? Есть какие-то механизмы? |
|
|
kwisp |
30.9.2009, 8:03
Сообщение
#6
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
ну как сказать.
если хранить координаты концов линий к примеру в векторе и перерисовывать все линии в paintEvent, то удалив из вектора координату при следующей перерисовке не нужной линии не будет.(если удалить все то ничего не будет) читай про рисование в Qt, обнаружишь что перед вызовом paintEvent виджет уже стёрт. т.е. если в нем вызвать paintEvent предка то все линии пропадут. флагами можно выставлять условия в переопределенном paintEvent рисовать или не рисовать(вызывать отрисовку вектора или просто вызывать paintEvent родительского класса). Сообщение отредактировал kwisp - 30.9.2009, 8:05 |
|
|
kwisp |
30.9.2009, 9:03
Сообщение
#7
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
вот тебе кусок кода
разбирайся. Раскрывающийся текст
|
|
|
myr |
30.9.2009, 12:58
Сообщение
#8
|
Студент Группа: Участник Сообщений: 37 Регистрация: 4.9.2009 Из: С-Пб Пользователь №: 1052 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо. Пробую.
|
|
|
myr |
30.9.2009, 19:40
Сообщение
#9
|
Студент Группа: Участник Сообщений: 37 Регистрация: 4.9.2009 Из: С-Пб Пользователь №: 1052 Спасибо сказали: 0 раз(а) Репутация: 0 |
Алгоритм понятен, получилось.
Проконсультируйте еще пожалуйста. У меня главное окно программы на нем компоненнт, наследуемый от Scrollview, у компонента есть сигнал после отрисовки. SignalAfterPaint(QPainter* p, int cx, int cy, int cw, int ch); По событию мыши главного окна вызываю для Scrollview -repaint() не попадаю в SignalAfterPaint Если вызываю contextUpdate() все работает, но жутко мигает. В Scrollview у меня графика с мелкими элементами, перерисовывать не желательно. Возникло 2 вопроса. - как достучаться до paintEvent компонента, кооторый уже лежит на форме. (Не понимаю. по шагам если можно.) - как нарисовать поверх? не периресовывая всего изображения в Scrollview |
|
|
kwisp |
30.9.2009, 20:35
Сообщение
#10
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
- как достучаться до paintEvent компонента, кооторый уже лежит на форме. (Не понимаю. по шагам если можно.) - как нарисовать поверх? не периресовывая всего изображения в Scrollview есть соответствующие темы на форуме. сейчас буду вспоминать где они и как называются а ты поищи. отвечу сразу на первый вопрос сразу -- никак, только наследовать компонент и переопределять. |
|
|
Текстовая версия | Сейчас: 29.3.2024, 17:24 |