Получить обновленный размер QGraphicsView - PullRequest
0 голосов
/ 17 мая 2010

В моем приложении Qt я динамически создаю QGraphicsView и добавляю их внутрь 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 голосов
/ 14 июня 2010

Не уверен, зачем вам нужен размер первого представления, но Qt делает только несколько перерисовок, когда считает, что он подходит. Поэтому вы не можете полагаться на размер, который запрашиваете за пределами представления.

Я бы попытался использовать resizeEvent , чтобы получать уведомления об изменении размера элемента и затем выполнять необходимые действия.

0 голосов
/ 18 мая 2010

Вы, вероятно, должны использовать методы 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();
...