2013-04-09 61 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);