Рисование графического элемента внутри графического полигона - PullRequest
0 голосов
/ 29 февраля 2012

Я создал класс с именем Node, который наследуется от GraphicsItem.Я также создал другой класс, который называется BLock и наследуется от QGraphicsPolygon.

Как мне нарисовать узлы в разных позициях внутри каждого блока?

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;
}

1 Ответ

0 голосов
/ 31 мая 2012

Вы можете просто создать свои объекты Node и назначить их родителя в качестве объекта Block.Затем узлы будут использовать систему координат, локальную для вашего объекта Block.

Например, если вы сделали что-то подобное в конструкторе Block:

Node* node1=new Node(this);

node1->setPos(-10,-10);

Node* node2=new Node(this);

node1->setPos(10,10);

Это даст вам два узла,Одно смещение выше и слева от блока, а одно смещение ниже и справа.

...