0

私の Qt アプリケーションでは、動的に QGraphicsView を作成し、それらをQGridLayout内に追加しています。グリッド内に最初のビューを追加すると、ビューはグリッド内の使用可能なすべてのスペースをカバーします。次に、2 番目のビューを追加すると、グリッド内に 2 つの同じサイズのビューができます。次に、3 番目のビューを追加すると、グリッド内に同じサイズのビューが 3 つあります。等々。

最初のビューの更新されたサイズを取得するにはどうすればよいですか?

以下は私の試用版ですが、これは機能していないと思います。

//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 に答える