2013-04-09 58 views

回答

1

最简单的方法是添加一个不可见的QGraphicsRectItem作为第一项。

然后添加其他项目作为第一个项目的子项目。

第一项的中心是协调中心。

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 
          | 

,让其获取窗口大小,覆盖这些方法:

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); 
} 
+0

我想,当你调整窗口的大小有图形的项目也跟着左边。如果我调整窗口大小,它们会失去初始对齐并最终出现在中心。 – user1845360 2013-04-09 11:12:12

+0

@ user1845360:我更新了我的答案。 – deepmax 2013-04-09 11:16:47

+0

这里的问题是,随着窗口大小的增加,我的图形项目被放大。 – user1845360 2013-04-09 12:47:41

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