2017-06-15 90 views
2

我试图在Qt上绘制一个堆叠的条形图,我跟着文档上的教程,但是当我试图把图形放在QGraphicsView里面时,我得到了一个未使用的空间并且无法管理使场景符合观点。fit QGraphicsScene to QGraphicsView

我的代码是一样的文档,一加以下,以使场景在视图中显示:

QGraphicsScene *scene = new QGraphicsScene(this); 
scene->addWidget(chartView); 
ui->view->setScene(scene); 

而我得到的是这种

enter image description here

正如你可以看到有很多未使用的空间,它使文本消失,我想使图形适合视图,但我似乎无法找到一种方法来做到这一点。

我试过很多不同的方式使用

ui->view->ensureVisible (scene->sceneRect()); 
ui->view->fitInView(scene->sceneRect(),Qt::KeepAspectRatio); 

ui->view->setSceneRect(0,0,ui->view->frameSize().width(),ui->view->frameSize().height()); 

,但似乎没有任何工作(第二个解决方案只是移动图形的左上角)

+0

你在Widget构造函数中做这个吗? – vaultah

+0

@vaultah不,我有一个函数在qwidget中被从mainwindow调用并绘制图 –

+0

@vaultah我jjust试图把它放到构造函数中但我得到了相同的结果 –

回答

1

按评论......真正的问题是chartView的基本大小,而不是与QGraphicsViewQGraphicsScene有什么关系。

QWidget被添加到QGraphicsScene时,得到的QGraphicsProxyWidget通常会遵守该小部件的大小提示和策略。

此外,虽然,QGraphicsScene将现场设置矩形的所有场景中的项目的边界矩形,然后QGraphicsView将根据任何viewport anchor是力位置的情景。如果场景中有一组复杂的项目或边界矩形小于GraphicsView中显示的矩形,则最终结果可能会在视觉上产生误导。

因此,如果一个小部件在添加到QGraphicsScene时确实看起来很奇怪,那么通过在桌面上将其显示为顶级窗口进行测试通常是一个不错的主意,并且确保它在进一步行动之前按照预期行事。