Используя 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. <html5> нарисовать треугольник вокруг круга
- 2. Текст вокруг круга с Javascript
- 3. Как нарисовать гладкий путь через точки вокруг круга
- 4. анимационный текст для поворота вокруг круга
- 5. Текст вокруг центра круга по радиусу
- 6. Клещей вокруг круга
- 7. Поворот круга вокруг другого круга
- 8. javascript canvas нарисовать несколько прямоугольников вокруг круга, обращенного к центру
- 9. нарисовать прямоугольник вокруг определенного круга с помощью OpenCV и C++
- 10. Как нарисовать штрих внутри круга?
- 11. PIXI.js - Как нарисовать половину круга?
- 12. Как оживить вид вокруг круга?
- 13. Как разместить этикетки вокруг круга?
- 14. Перемещение тени вокруг круга
- 15. Как написать текст вокруг круга с использованием класса QPainter?
- 16. Как обтекать текст вокруг круга в наборе спрайтов/Swift
- 17. Вращение линии вокруг круга
- 18. Выравнивание элементов вокруг круга
- 19. Оберните изображение вокруг круга
- 20. Письмо обертывание вокруг круга
- 21. Перетаскивание круга вокруг libGDX
- 22. Обтекание текста вокруг круга css
- 23. Как нарисовать текст на дуге?
- 24. Удаление полигона/круга вокруг маркера?
- 25. рисование круга радиуса R вокруг точки
- 26. Нарисуйте текст внутри круга
- 27. Java JPanel Формирование дуги вокруг края круга
- 28. Как нарисовать границу вокруг UILabel?
- 29. Как нарисовать прямоугольник вокруг контуров?
- 30. Как повернуть верхнюю границу вокруг круга?
Можете ли вы описать более подробно, что uou хотите достичь? –
@allenchen, вы хотите сделать что-то вроде этого? http://conal.net/pan/Gallery/intro/medres/circle%20text.jpg –
Я буду следовать вашим предложениям. Спасибо. Как сразу я могу получить ответ отсюда! – allenchen