获取 QGraphicsView 的更新大小

发布于 2024-09-02 01:56:42 字数 828 浏览 9 评论 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);
    }

In my Qt Application I am dynamically creating QGraphicsView(s) and adding them inside
a QGridLayout.
When I add first view inside grid, the view covers all the available space inside grid.
Then I add second view and there are now two equally sized views inside grid.
Then I add third view and there are now three equally sized views inside grid.
And so on.

How can I get updated size of first view?

Below is my trial but I think this is not working.

//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);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

稍尽春風 2024-09-09 01:56:42

您可能应该使用 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();

You probably should use the QWidget::rect() methods to get the geometry of the views themselves. Here is a sample that should work as intended.

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();
一曲琵琶半遮面シ 2024-09-09 01:56:42

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

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

Not sure why you need the size of the first view, but Qt does only few redraws at the time it "thinks" it is suited. Therefore you can't rely on a size you query outside the view.

I'd try to use the resizeEvent to get notified when the size of an item changes and perform the necessary actions then.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文