QT를 사용하여 원형 입력을 따르는 방식으로 사용자가 입력 한 (텍스트) 글꼴을 그리는 방법은 무엇입니까?원을 둘러싼 텍스트를 그리는 방법?
1
A
답변
2
QT에 관해서는 전혀 알지 못하지만 귀하의 질문을 올바르게 이해했다면 간단한 Google 검색으로 해결책을 찾았습니다. 코드는 다음과 같습니다 여기에 소스 링크입니다 :
#include <QtGui>
#include <cmath>
class Widget : public QWidget
{
public:
Widget()
: QWidget() { }
private:
void paintEvent (QPaintEvent *)
{
QString hw("hello world");
int drawWidth = width()/100;
QPainter painter(this);
QPen pen = painter.pen();
pen.setWidth(drawWidth);
pen.setColor(Qt::darkGreen);
painter.setPen(pen);
QPainterPath path(QPointF(0.0, 0.0));
QPointF c1(width()*0.2,height()*0.8);
QPointF c2(width()*0.8,height()*0.2);
path.cubicTo(c1,c2,QPointF(width(),height()));
//draw the bezier curve
painter.drawPath(path);
//Make the painter ready to draw chars
QFont font = painter.font();
font.setPixelSize(drawWidth*2);
painter.setFont(font);
pen.setColor(Qt::red);
painter.setPen(pen);
qreal percentIncrease = (qreal) 1/(hw.size()+1);
qreal percent = 0;
for (int i = 0; i < hw.size(); i++) {
percent += percentIncrease;
QPointF point = path.pointAtPercent(percent);
qreal angle = path.angleAtPercent(percent);
qreal rad =qreal(0.017453292519943295769)*angle; // PI/180
// From the documentation:
/**
QTransform transforms a point in the plane to another point using the following formulas:
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
**/
// So the idea is to find the "new position of the character
// After we apply the world rotation.
// Then translate the painter back to the original position.
qreal sina = std::sin(rad);
qreal cosa = std::cos(rad);
// Finding the delta for the penwidth
// Don't divide by 2 because some space would be nice
qreal deltaPenX = cosa * pen.width();
qreal deltaPenY = sina * pen.width();
// Finding new posision after rotation
qreal newX = (cosa * point.x()) - (sina * point.y());
qreal newY = (cosa * point.y()) + (sina * point.x());
// Getting the delta distance
qreal deltaX = newX - point.x();
qreal deltaY = newY - point.y();
// Applying the rotation with the translation.
QTransform tran(cosa,sina,-sina,cosa,-deltaX + deltaPenX,-deltaY - deltaPenY);
painter.setWorldTransform(tran);
painter.drawText(point,QString(hw[i]));
}
}
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
Widget widget;
widget.show();
return app.exec();
}
+0
대단히 감사합니다. 대답은 도움이 필요합니다. – allenchen
+0
다행스럽게 생각합니다. :) –
관련 문제
- 1. 채워진 원을 그리는 방법?
- 2. mapView에 원을 그리는 방법
- 3. 상단에서 시작하는 원을 그리는 방법
- 4. MVC 아키텍처를 따라 원을 그리는 방법
- 5. Google지도 API에서 복잡한 투명 원을 그리는 방법
- 6. Google지도 v3에서 빈 원을 그리는 방법
- 7. 테이블 뷰에서 선, 원을 그리는 방법
- 8. MATLAB에서 임의의 위치에 원을 그리는 방법
- 9. 자유롭게 보이는 타원이나 원을 그리는 방법?
- 10. 파이썬에서 2 차원 평면에 원을 그리는 방법
- 11. VC++에서 CxImage를 사용하여 원을 그리는 방법
- 12. 주변을 둘러싼 사각형을 표시하는 원을 클릭하는 방법 ?? 플래시 사용 as3.0
- 13. 이미지에 텍스트를 그리는 방법
- 14. 이미지에 텍스트를 그리는 방법
- 15. 선택한 텍스트를 그리는 방법
- 16. iphone에 텍스트를 그리는 방법
- 17. 원을 그리는 사용자 정의 JLabel
- 18. 그리드에서 원을 그리는 방법은 무엇입니까?
- 19. 앵커 텍스트를 둘러싼 단어 추출하기
- 20. 그림 상자에 텍스트를 그리는 방법?
- 21. 바탕 화면에 텍스트를 그리는 방법?
- 22. drawTextOnPath hoffset을 사용하여 원을 그리는 텍스트?
- 23. WPF XAML 템플릿에서 원을 그리는 방법은 무엇입니까?
- 24. Java에서 대각선으로 원을 그리는 방법은 무엇입니까?
- 25. XNA에서 3D 지형에 원을 그리는 방법은 무엇입니까?
- 26. Raphael - 원을 그리는 기본 지연 기능은 무엇입니까?
- 27. 파이 게임이 원을 그리는 이유는 무엇입니까?
- 28. XNA에서 특정 색상의 원을 그리는 방법은 무엇입니까?
- 29. 자바로 채워진 원을 그리는 방법은 무엇입니까?
- 30. 중심 축 원을 그리는 Galaxy Nexus
당신이 가다가 무엇을 달성하고자하는 더 세부 사항을 설명 할 수는? –
@allenchen, 이럴 권리가 있니? http://conal.net/pan/Gallery/intro/medres/circle%20text.jpg –
나는 당신의 제안을 따를 것입니다. 고맙습니다. 얼마나 빨리 답변을 얻을 수 있습니까? – allenchen