2013-05-08 3 views
3

Я хотел бы ожидать, из документации, что этот фрагментQt вложенного QGraphicsItem координаты

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    QGraphicsView *v = new QGraphicsView(new QGraphicsScene); 
    setCentralWidget(v); 

    QGraphicsRectItem *r1 = v->scene()->addRect(QRectF(100,100, 200,200), QPen(), QBrush(Qt::red)); 
    QGraphicsRectItem *r2 = new QGraphicsRectItem(r1); 
    r2->setRect(QRectF(10,10, 50,50)); 
    r2->setBrush(QBrush(Qt::blue)); 
} 

бы нарисовать синий прямоугольник внутри один красный, а вот результат:

enter image description here

Я что-то пропустил?

ответ

3

Пропустить что-нибудь?

Да.

Вызов setRect() на QGraphicsRectItem фактически не изменит свою pos(), он просто меняет положение прямоугольника, который она получает, но позиция элемента не изменяется. Таким образом, ваш r1 имеет pos (0, 0), но его прямоугольник рисуется на расстоянии (100, 100) до его pos().

Чтобы избежать путаницы, обычно проще оставить свой прямоугольник на (0, 0) и позвонить setPos() на свой QGraphicsRectItem, чтобы переместить его туда, где вы хотите.

+0

Благодарим вас за это четкое объяснение! – CapelliC

0

Если вам нужен синий прямоугольник внутри красного цвета, вы можете либо установить его прямое положение в координатах экрана, либо установить синий прямоугольник в качестве родителя красного прямоугольника с помощью setParentItem. Таким образом, положение ребенка устанавливается относительно его родителя.

Смежные вопросы