0

在我的 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);
    }
4

2 回答 2

0

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

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

于 2010-06-14T00:43:54.357 回答
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();
于 2010-05-17T20:03:14.400 回答