В моем приложении Qt Я динамически создаю QGraphicsView (s) и добавляю их внутри a QGridLayout. Когда я добавляю первый вид внутри сетки, вид охватывает все доступное пространство внутри сетки. Затем я добавляю второй вид, и теперь есть два одинаковых размера внутри сетки. Затем я добавляю третий вид, и теперь есть три одинаковых размера внутри сетки. И так далее.Получить обновленный размер QGraphicsView
Как я могу получить обновленный размер первого вида?
Ниже приведено мое исследование, но я думаю, что это не работает.
//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);
}
Одна из проблем, с которыми мы столкнулись в прошлом, заключается в том, что их макеты могут задерживать изменение размера любого из виджетов до тех пор, пока они не понадобятся; обычно прямо перед тем, как они рисуют. Поэтому получение размера из виджетов в макете может быть неправильным до тех пор, пока макет не будет выполнен. Я считаю, что есть функция, которая может привести к изменению размера макета, но не помню, что это из рук в руки. –
Что вы пытаетесь сделать с размером? cjhuitt прав, обычно макет не корректирует размер до тех пор, пока он не понадобится. Вероятно, вы делаете то, что вам не нужно, если вам нужно синхронно получать размер после того, как макет исправляет сам. Однако, если вы действительно хотите это сделать, вызовите функцию viewGrid-> activate() после добавления виджета, чтобы заставить его повторить макет. –
Нет серьезной цели, просто пытаясь изучить Qt Framework. Но viewGrid-> activate() не работает. – onurozcelik