C++ 创建文本控制盘QT/PYQT

C++ 创建文本控制盘QT/PYQT,c++,qt,python-2.7,pyqt,visualization,C++,Qt,Python 2.7,Pyqt,Visualization,您好,我正在使用networkX的圆形布局创建节点的网络图。 这是伟大的布局节点在一个圆圈,但我想添加文本到每个节点(描述),但文本不能重叠,所以它仍然可读 像这样的。注意所有文本是如何从每个节点向外突出的。 我怎么能这样做呢。我正在使用pyqt/qt,我知道painter.rotate方法,但我不能有固定的旋转,为每个节点的描述计算正确旋转的最佳方法是什么。 我在QGraphicscene上绘制节点,这样我就可以得到场景的boundingRect,也可以得到场景的中心。我还可以通过Networ

您好,我正在使用networkX的圆形布局创建节点的网络图。 这是伟大的布局节点在一个圆圈,但我想添加文本到每个节点(描述),但文本不能重叠,所以它仍然可读 像这样的。注意所有文本是如何从每个节点向外突出的。 我怎么能这样做呢。我正在使用pyqt/qt,我知道painter.rotate方法,但我不能有固定的旋转,为每个节点的描述计算正确旋转的最佳方法是什么。 我在QGraphicscene上绘制节点,这样我就可以得到场景的boundingRect,也可以得到场景的中心。我还可以通过NetworkX的环形布局输出每个节点的位置。获得2分是一个开始。我不确定在那之后最好的办法是什么。 如果有几篇文章展示了一个好的解决方案,请告诉我。 另一个缺点是,用户可以移动节点本身。但我想象,一旦我学会了如何绘制文本,我就可以在节点本身被用户移动的情况下应用相同的公式/方法。 只需要一个计算节点中心相对于图形中心的角度的一般方法。 如果有代码示例可以告诉我正确的方向,请分享


感谢

通常,文本的旋转与用于在文本矩形上定位参考点的半径的旋转相同

下面的代码演示了如何使用painter转换轻松实现所需的结果。文本对齐技巧的灵感来自


你知道节点的坐标和节点圆中心的坐标吗?
import sys
from PyQt5.QtCore import QRect, QRectF, QSizeF, QPointF, Qt
from PyQt5.QtGui import QPainter, QPicture, QFont, QColor
from PyQt5.QtWidgets import QApplication, QLabel

def drawNode(painter, angle, radius, text):
    size = 32767.0;
    painter.save();
    painter.rotate(-angle);
    painter.translate(radius, 0);
    painter.drawText(QRectF(0, -size/2.0, size, size), Qt.AlignVCenter, text);
    painter.restore();

if __name__ == "__main__":
    app = QApplication(sys.argv)

    pic = QPicture()
    pic.setBoundingRect(QRect(-100, -100, 200, 200))
    p = QPainter(pic)

    p.drawEllipse(0, 0, 3, 3)
    p.setFont(QFont("Helvetica", 25))
    for angle in range(0, 359, 30):
        drawNode(p, angle, 50, str(angle))
    p.end()

    l = QLabel()
    l.setPicture(pic);
    l.show();

    sys.exit(app.exec_())