qt在QGraphicsView上面Scene的item里面画线段,已知两点,如何画直线,就是线段两端延伸到view的边框为止

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt在QGraphicsView上面Scene的item里面画线段,已知两点,如何画直线,就是线段两端延伸到view的边框为止相关的知识,希望对你有一定的参考价值。

参考技术A 自己定义一个polylineitem类,鼠标单击时,把坐标点保存在一个QVector中,在polylineitem类的paint函数中绘制折线,调用QPainter类的drawPolyline()函数进行绘制。

适合 QGraphicsScene 到 QGraphicsView

【中文标题】适合 QGraphicsScene 到 QGraphicsView【英文标题】:fit QGraphicsScene to QGraphicsView 【发布时间】:2017-06-15 15:31:07 【问题描述】:

我正在尝试在 Qt 上绘制堆叠条形图,我按照文档上的教程进行操作,但是当我尝试将图表放在 QGraphicsView 中时,我得到了很多未使用的空间并且无法制作场景适合视图。

我的代码与文档相同,加上以下内容以使场景显示在视图中:

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

我得到的是这个

如您所见,有很多未使用的空间,它使文本消失,我想让图表适合视图,但我似乎找不到这样做的方法。

我尝试了许多不同的方式使用

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());

但似乎没有任何效果(第二个解决方案只是将图表移动到左上角)

【问题讨论】:

你是在 Widget 构造函数中这样做的吗? @vaultah 不,我在 qwidget 中有一个从主窗口调用并绘制图形的函数 @vaultah 我只是试图将它放入构造函数中,但我得到了相同的结果 您确定是QGraphicsScene 和/或QGraphicsVew 有问题吗?从您显示的图像看来,chartViewsizeHintsizePolicy 不正确,导致文本被剪切。如果您将chartView 显示为大小与其sizeHint 相对应的***窗口,它会是什么样子? @G.M.准确复制文档上的示例(图表位于主窗口的中心),图表的大小正确 【参考方案1】:

根据评论...真正的问题是chartView 的基本大小,而不是与QGraphicsViewQGraphicsScene 有关。

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

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

因此,如果一个小部件在添加到 QGraphicsScene 时看起来确实很奇怪,通常最好通过将其显示为桌面上的***窗口来进行测试,并确保它的行为符合预期,然后再继续。

【讨论】:

以上是关于qt在QGraphicsView上面Scene的item里面画线段,已知两点,如何画直线,就是线段两端延伸到view的边框为止的主要内容,如果未能解决你的问题,请参考以下文章

QT:QGraphicsView QGraphicsScene QGraphicsItem理解

qt中怎样在graphicsview中画多根线

QT 缩放到多边形

求qt在QGraphicsView中主动捕获鼠标位置的实现方法?

使用 QGraphicsView 方法 Scene() 分配 QGraphicsScene 变量

QGraphicsView fitInView 边距