user1845360
user1845360

Reputation: 857

Alignment of qtgraphics items in qt graphics scene

I have a graphics view which contains a scene with some graphics items. How can I make those graphics items appear on the left side of the scene and not in the center ?

I have looked through many ideas but no luck.

Upvotes: 1

Views: 2570

Answers (2)

ScrewTSW
ScrewTSW

Reputation: 1

Scene_item.setSceneRect(x0,y0,x1,y1);

Upvotes: 0

masoud
masoud

Reputation: 56479

The easiest way is to add an invisible QGraphicsRectItem as the first item.

Then add other items as children of that first item.

The center of the first item is the center of the coordination.

QGraphicsScene *scene = new QGraphicsScene(widget.graphicsView);

// ....

QGraphicsRectItem *frame = scene->addRect(-100,-100,100,100);
frame->setPen(Qt::NoPen);

// ....

// Add new items as children of frame
// Align them relative to their parent

 

                           ^
                           |
                           |
        -100,100           |            100,100
            +-----------------------------+
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
---------------------------+------------------------>
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            |              |              |
            +-----------------------------+
        -100,100           |            100,-100
                           |

To make it aware to window size, override these methods:

class MainForm : public QMainWindow
{
//...

QGraphicsScene *scene;     // Move it here
QGraphicsRectItem *frame;  // Move it here

protected:
    virtual void resizeEvent(QResizeEvent * event);
    virtual bool event(QEvent * event);
    virtual void resizeAction();
//...
};

void MainForm::resizeAction()
{
    QRectF rect(field->rect());
    widget.graphicsView->setSceneRect(rect);
    widget.graphicsView->fitInView(rect, Qt::KeepAspectRatio);
}

void MainForm::resizeEvent(QResizeEvent * event)
{
    resizeAction();
    QMainWindow::resizeEvent(event);
}

bool MainForm::event(QEvent * event)
{
    if (event->type() == QEvent::Show)
        resizeAction();

    return QMainWindow::event(event);
}

Upvotes: 2

Related Questions