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. ラテックス:逐語的なブロックを含むテキストの周囲にボックスを描画する方法
- 3. iphoneでテキストを描画する方法
- 4. イメージにテキストを描画する方法
- 5. キャンバスで円を描く方法は?
- 6. JUNG2:円を描く方法は?
- 7. 透明円を描く方法は?
- 8. 体系図の描画円
- 9. テキストを囲む囲み?
- 10. JavaScriptでポリラインの周囲にポリゴンを描画する方法は?
- 11. 同じパネルに複数の楕円を描画する方法
- 12. Android - 円弧ベースのグラデーションを描画する方法
- 13. 描画長方形と楕円
- 14. VC++でCxImageを使用して円を描画する方法
- 15. Androidで3D円グラフを描画する方法
- 16. 2次元平面上に円を描画する方法
- 17. Androidのマップ描画円ラジオはSQLiteデータベース
- 18. ハフ変換(emgu cv)で見つかった円を囲む線を描く
- 19. DIVをCSSで囲む方法DIVをCSSで囲む方法
- 20. Rでバープロットを囲む方法Boxplotにボーダーを描画するのと同じ方法
- 21. 別のプロットの所定の位置に円グラフを描画する方法は?
- 22. Matlabで認識された画像の周囲に円を描く
- 23. 空のMS Chart ChartAreaにテキストを描画する方法は?
- 24. 3Dテキストを描画する最良の方法は?
- 25. UIImageViewのテキストを囲む
- 26. PILのテキストを囲む
- 27. matplotlibのテキストを囲むボックス
- 28. UButtonのテキストを囲む
- 29. openglesで円を描く方法
- 30. 既存の画像に円を描く
あなたはuouが達成したいものをより詳細に説明することはできますか? –
@allenchen、あなたはこのようなことをすることを意味しますか? http://conal.net/pan/Gallery/intro/medres/circle%20text.jpg –
私はあなたの提案に従います。ありがとうございました。すぐに私はここから答えを得ることができます! – allenchen