如何在不缩放场景的情况下对齐QGraphicsView左侧的矩形?

时间:2016-06-10 12:46:40

标签: qt qgraphicsview

这是我想要做的。

我需要在QGraphicsView中绘制一系列左右对齐的矩形。我的意思是,如果矩形我有posion(0,y)矩形i + 1需要有位置(0,max),其中max是矩形的右边"触及" QGraphicsView的右侧。

当调整窗口大小时,我需要重新计算max的值,使矩形始终触及屏幕的右侧。

以下是我添加场景的方法(这引用了一个继承QGraphicsView的类)

scene = new QGraphicsScene(this);
this->setScene(scene);
this->setAlignment(Qt::AlignTop|Qt::AlignLeft);

要添加一个接触左边框的矩形,我会添加一个(0,yvalue,width,height)。

如何计算X的值以使矩形触及右边界?

2 个答案:

答案 0 :(得分:0)

这个小例子应该计算移位并根据你想要的对齐方式移动选项或项目列表中的所有项目(我表示正确,但让,中心,顶部,底部都是相同的)。

QRectF refRect = scene()->sceneRect();
QList<QGraphicsItem*> sel = allItemsYouWantAligned;  // scene()->selectedItems();  for example

foreach(QGraphicsItem* selItem, sel)
{
    qreal dx = 0, dy = 0;
    QRectF itemRect = selItem->mapToScene(selItem->boundingRect()).boundingRect();
    if(align_right)
        dx = refRect.right() - itemRect.right();
    else
        .. calculate either dx or dy on how you want to align
    selItem->moveBy(dx, dy);
}

重新阅读问题 - 我发现你并不需要移动矩形,而是创建新的更大和更大的矩形。

您的解决方案非常简单。如果你想调整大小而不是移动 - 您需要通过dx增量对项目setRect()进行QRectF r = selItem->rect(); r.setWidth(r.width + dx); selItem->setRect(r);

jQuery( "#boz .wrapper1" ).click(function() {
    jQuery('button.select1', this).click();
    jQuery('button.submit', this).click();
});

答案 1 :(得分:0)

确定。所以这应该放在QGraphicsView的resize事件中。但这就是我想要的:

void AView::resized(){

    scene->clear();
    QSize newsize = this->size();

    qreal w = newsize.width()*.99;
    qreal h = newsize.height()*.99;
    this->setSceneRect(0,0,w,h);
    scene->setSceneRect(0,0,w,h);

    qreal rectwidth = 100;
    qreal newx = w - rectwidth;
    left = new QGraphicsRectItem(0,0,rectwidth,100);
    left->setBrush(QBrush(Qt::red));
    right = new QGraphicsRectItem(newx,100,rectwidth,100);
    right->setBrush(QColor(Qt::blue));

    scene->addItem(left);
    scene->addItem(right);

}

通过这种方式,蓝色矩形几乎总是在边界处。 Aslo没有拉伸图像。右边框之间存在间隙,由于窗口大小调整而增加,但是这个&gt; size()返回的尺寸似乎略大于&#34;白色区域&#34;你在屏幕上看到的。添加.99可以从我的实验中获得更好的结果。