C++ 在图形多边形中绘制图形站点
我创建了一个名为Node的类,它继承自GraphicsItem。我还创建了另一个名为BLock的类,它继承自QGraphicsPolygon 如何在每个块内的不同位置绘制节点C++ 在图形多边形中绘制图形站点,c++,qt,qt4,qgraphicsitem,qgraphicsscene,C++,Qt,Qt4,Qgraphicsitem,Qgraphicsscene,我创建了一个名为Node的类,它继承自GraphicsItem。我还创建了另一个名为BLock的类,它继承自QGraphicsPolygon 如何在每个块内的不同位置绘制节点 Node.cpp void Node::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget * /* widget */) { QPen pen(myOu
Node.cpp
void Node::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget * /* widget */)
{
QPen pen(myOutlineColor);
if (option->state & QStyle::State_Selected) {
pen.setStyle(Qt::DotLine);
pen.setWidth(2);
}
painter->setPen(pen);
painter->setBrush(myBackgroundColor);
QRectF rect = outlineRect();
painter->drawRoundRect(rect, roundness(rect.width()),
roundness(rect.height()));
painter->setPen(myTextColor);
painter->drawText(rect, Qt::AlignCenter, myText);
}
Block.cpp
Block::Block(QGraphicsItem *parent, QGraphicsScene *scene, int numNodes)
: QGraphicsPolygonItem(parent, scene)
{
mPolygon << QPointF(-100, -100) << QPointF(100, -100)
<< QPointF(100, 100) << QPointF(-100, 100)
<< QPointF(-100, -100);
setPolygon(mPolygon);
setFlag(QGraphicsItem::ItemIsMovable, true);
setFlag(QGraphicsItem::ItemIsSelectable, true);
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
}
QPixmap Block::image() const
{
QPixmap pixmap(250, 250);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.setPen(QPen(Qt::black, 8));
painter.translate(125, 125);
painter.drawPolyline(mPolygon);
return pixmap;
}
只需创建节点对象并将其父对象指定为块对象即可。然后,节点将使用块对象的局部坐标系 例如,如果在块构造函数中执行类似操作:
Node* node1=new Node(this);
node1->setPos(-10,-10);
Node* node2=new Node(this);
node1->setPos(10,10);
这将为您提供两个节点。一个偏移位于块的上方和左侧,一个偏移位于块的下方和右侧