gpt4 book ai didi

c++ - Qt 围绕其中心点旋转文本

转载 作者:行者123 更新时间:2023-11-28 01:58:49 31 4
gpt4 key购买 nike

我正在使用 Qt 5.6,我想围绕一个圆圈绘制一些文本标签并旋转文本标签以根据其在圆圈周围的位置来定位文本,因此 12 点钟方向将旋转 0 度, 3 点钟会旋转 90 度,6 点钟会旋转 180 度等等。

我将文本围绕其中心位置对齐:

    void drawText(QPainter* pobjPainter, qreal fltX, qreal fltY
,int intFlags, const QString* pobjText) {
const qreal fltSize = 32767.0;

QPointF ptfCorner(fltX, fltY - fltSize);

if ( (intFlags & Qt::AlignHCenter) == Qt::AlignHCenter ) {
ptfCorner.rx() -= fltSize / 2.0;
} else if ( (intFlags & Qt::AlignRight) == Qt::AlignRight ) {
ptfCorner.rx() -= fltSize;
}
if ( (intFlags & Qt::AlignVCenter) == Qt::AlignVCenter ) {
ptfCorner.ry() += fltSize / 2.0;
} else if ( (intFlags & Qt::AlignTop) == Qt::AlignTop ) {
ptfCorner.ry() += fltSize;
}
QRectF rctPos(ptfCorner, QSizeF(fltSize, fltSize));
pobjPainter->drawText(rctPos, intFlags, *pobjText);
}

我想对文本应用旋转。

我想重现与显示的内容类似的内容:

http://www.informit.com/articles/article.aspx?p=1405545&seqNum=2

rotate 函数似乎旋转了整个 painter Canvas ,所以坐标必须考虑到旋转,这真的让我很为难。我想围绕椭圆定位文本然后旋转它,我怎么知道坐标应该是什么?

最佳答案

坚持使用时钟示例,您可以尝试类似...

virtual void paintEvent (QPaintEvent *event) override
{
QPainter painter(this);
double radius = std::min(width(), height()) / 3;
for (int i = 0; i < 12; ++i) {
int numeral = i + 1;
double radians = numeral * 2.0 * 3.141592654 / 12;

/*
* Calculate the position of the text centre as it would be required
* in the absence of a transform.
*/
QPoint pos = rect().center() + QPoint(radius * std::sin(radians), -radius * std::cos(radians));

/*
* Set up the transform.
*/
QTransform t;
t.translate(pos.x(), pos.y());
t.rotateRadians(radians);
painter.setTransform(t);

/*
* Specify a huge bounding rectangle centred at the origin. The
* transform should take care of position and orientation.
*/
painter.drawText(QRect(-(INT_MAX / 2), -(INT_MAX / 2), INT_MAX, INT_MAX), Qt::AlignCenter, QString("%1").arg(numeral));
}
}

关于c++ - Qt 围绕其中心点旋转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300346/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com