获取QGraphicsView的更新大小

时间:2010-05-17 19:29:14

标签: c++ qt qt4 qgraphicsview

在我的Qt应用程序中,我动态创建QGraphicsView(s)并将其添加到内部 一个QGridLayout。 当我在网格中添加第一个视图时,视图将覆盖网格内的所有可用空间。 然后我添加第二个视图,现在网格中有两个大小相等的视图。 然后我添加了第三个视图,现在网格中有三个大小相等的视图。 等等。

如何更新第一个视图的大小?

以下是我的试用版,但我认为这不起作用。

//Definition of viewsPerRow
 static const int viewsPerRow = 3;
 void window::newViewRequested()
 {
     QGraphicsView *view = new QGraphicsView;
     view->setVisible(true);
     viewVector.push_back(view);

     for(int i = viewGrid->count(); i < viewVector.count(); i++)
     {
       viewGrid->addWidget(view,i / viewsPerRow ,i % viewsPerRow);
     }
      qDebug()<<viewGrid->cellRect(0,0);
    }

2 个答案:

答案 0 :(得分:0)

您可能应该使用QWidget::rect()方法来获取视图的几何形状。这是一个应该按预期工作的样本。

QVector< QGraphicsView* > views;
for (int i=0 ; i < 3; ++i) {
  QGraphicsView *view = new QGraphicsView;
  view->setVisible(true);
  viewGrid->addWidget(view, i ,0);
  views.push_back(view);
}

qDebug() << "The view size of the first view is " << views[0]->rect();

答案 1 :(得分:0)

不确定为什么你需要第一个视图的大小,但Qt在它“认为”它适合的时候只做了很少的重绘。因此,您不能依赖于在视图外查询的大小。

我会尝试使用resizeEvent在项目大小发生变化时收到通知,然后执行必要的操作。