Название: Нарисовать линию со стрелкой Отправлено: n4ela от Октябрь 16, 2009, 22:48 Рисую линии через drawLine.
Нужно сделать на конце линии стрелку в какую сторону она указывает. Я так понимаю что нарисовать указатель надо по втором координатам drawLine. Может в Qt есть какой то ключ для setPen'a? Стрелки указывают в разные стороны под разным углом и я вообще не понимаю как можно нарисовать их вручную. Примеры смотрел, но там показано как рисовать линию что бы на конце был видит указатель мыши, а это совсем не то. Название: Re: Нарисовать линию со стрелкой Отправлено: _OLEGator_ от Октябрь 16, 2009, 22:56 Можно посмотреть в сторону QPainter::translate(), QLineF::angle(), QPainter::rotate()
1) QPainter::translate(координата_конца) 2) QPainter::rotate( QLineF::angle() +- необходимый_угол ) и отрисовать необходимой длины линию Название: Re: Нарисовать линию со стрелкой Отправлено: panAlexey от Октябрь 17, 2009, 00:03 хочешь сказать, что этот пример ничего не проясняет:
http://www.doc.crossplatform.ru/qt/4.3.2/painting-transformations.html Название: Re: Нарисовать линию со стрелкой Отправлено: break от Октябрь 17, 2009, 00:38 используй QPoligon и методы из QPainter работающие с ним - drawPligon и т.д. - можно только кончик стрелки ими рисовать, можно всю
Название: Re: Нарисовать линию со стрелкой Отправлено: Igors от Октябрь 17, 2009, 02:17 Рисую линии через drawLine. Может быть и есть "умный способ" (т.е. где-то уже сделано) но я такого не знаю и искать не буду :) Есть линия заданная 2-мя точками p0(x, y) и p1(x, y). Для нее надо нарисовать стрелку заданную 2 параметрами:Нужно сделать на конце линии стрелку в какую сторону она указывает. Я так понимаю что нарисовать указатель надо по втором координатам drawLine. Может в Qt есть какой то ключ для setPen'a? Стрелки указывают в разные стороны под разным углом и я вообще не понимаю как можно нарисовать их вручную. Примеры смотрел, но там показано как рисовать линию что бы на конце был видит указатель мыши, а это совсем не то. arrow_len - длина стрелки arrow_width - ширина стрелки Ну так и погнали в векторах. Псевдокод Код: Point2D direction = (p1 - p0).normalize(); Название: Re: Нарисовать линию со стрелкой Отправлено: break от Октябрь 17, 2009, 21:12 че мудрить???
бери QPoligon и пихай в него 3 точки (предположим что рисуем только наконечник стрелочки) QPoligon poligon; polygon << QPoint( 0, -arrow_width ); polygon << QPoint( -arrow_len, 0 ); polygon << QPoint( 0, arrow_width ); --- фактически получили наконечник направленный вниз (возьми тетрадку вклеточку поставь 0,0 в произвольной точке и проставь мои точки туда, потом соедини линиями) там где ты рисуешь делай так: painter->drawConvexPolygon( polygon ); или если надо повернуть на заданный угол: painter->save(); double arrowAngle = ??????НАДО ЗАДАТЬ; painter->rotate( -arrowAngle ); painter->drawConvexPolygon( polygon ); painter->restore(); вот чего мне удаось добиться таким способом - в рисунке: Название: Re: Нарисовать линию со стрелкой Отправлено: Igors от Октябрь 18, 2009, 15:27 double arrowAngle = ??????НАДО ЗАДАТЬ; Для линии заданной точками p0, p1Код: angle = atan2(p1.y - p0.y, p1.x - p0.x); че мудрить??? То есть рассчитать 3 точки на плоскости - значит "мудрить" :) ?Название: Re: Нарисовать линию со стрелкой Отправлено: n4ela от Октябрь 19, 2009, 16:00 Всем спасибо, получилось нарисовать как надо.
Название: Re: Нарисовать линию со стрелкой Отправлено: Drafter от Июнь 07, 2010, 23:46 Возможно, кому-то придётся ко двору более подробное решение :).
Тут рисуется классическая стрелка, типа ---> Код: QPolygon arrow; Название: Re: Нарисовать линию со стрелкой Отправлено: SASA от Июнь 09, 2010, 10:40 Я рисовал так:
- создаём линию QLineF - отрисовываем - поворачиваем на нужный угол QLineF::setAngle ( qreal angle ) - уменьшаем длину QLineF::setLength ( qreal length ) - отрисовываем (первая половина стрелочки) - поворачиваем на другую сторону линии QLineF::setAngle ( qreal angle ) - отрисовываем (вторая половина стрелочки) Если нужна стрелка с другой стороны, то нужно поменять координаты начала и конца линии. |