在我的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);
}
答案 0 :(得分: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();
答案 1 :(得分:0)
不确定为什么你需要第一个视图的大小,但Qt在它“认为”它适合的时候只做了很少的重绘。因此,您不能依赖于在视图外查询的大小。
我会尝试使用resizeEvent在项目大小发生变化时收到通知,然后执行必要的操作。