Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt PyQwt-qwt图慢_Qt_Qwt - Fatal编程技术网

Qt PyQwt-qwt图慢

Qt PyQwt-qwt图慢,qt,qwt,Qt,Qwt,我用PyQwt绘制了一个中等的数据集(666528个点),它需要相当长的时间来复制zoom等 ncalls tottime percall cumtime percall filename:lineno(function) 1 2.115 2.115 2.116 2.116 {built-in method replot} 我期待的是接近100毫秒而不是2.1秒 看起来其他人在Qwt上也遇到了同样的问题,但解决方案建议都与Qwt6中可用的选项有关,但只有

我用PyQwt绘制了一个中等的数据集(666528个点),它需要相当长的时间来复制zoom等

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    2.115    2.115    2.116    2.116 {built-in method replot}
我期待的是接近100毫秒而不是2.1秒

看起来其他人在Qwt上也遇到了同样的问题,但解决方案建议都与Qwt6中可用的选项有关,但只有用于v5的python绑定。
因此,我将Qwt版本5.2.1与Python 2.7.2一起使用

在Qwt6中,建议为ClipPolygons、FilterPoints、MinimizeMemory和ImageBuffer分别设置绘制属性。据我所知,问题在于画出所有的点,这些点很大程度上映射到同一个像素上,画图会一次又一次地重新画出同一个像素,而不是只画一次像素

我试着在绘图曲线上设置一些可用的属性,如下所示,但速度没有明显的差异

def addSignals(self, signals):
    for signal in signals:
        curve = QwtPlotCurve(signal.name())
        curve.setPaintAttribute(QwtPlotCurve.PaintFiltered, False)
        curve.setPaintAttribute(QwtPlotCurve.ClipPolygons, True)
        curve.setData(signal.x(), signal.y())
        curve.setRenderHint(QwtPlotItem.RenderAntialiased)
        curve.setPen(QPen(Qt.cyan))
        curve.attach(self)
    self.replot()
通过setData加载到PlotCurve对象的数据是来自信号对象的numpy数组。所示的方法附加到一个子类QwtPlot对象

我是否缺少Qwt版本中可用的选项,或者这仅适用于v6? 我有什么加速的选择


谢谢

好吧,QWT5对于您的用例来说应该不会慢很多

更重要的是使用了什么版本的Qt以及背后的图形系统类型:f.e Qt4/X11是硬件加速的

但至少代码的一个显而易见的性能问题是抗锯齿:

您可以在深度放大时启用它(在这种情况下,这是没有问题的,因为几乎所有多边形都被剪裁掉),但当显示超过600000条线时,它完全没有意义

显示多个点的数据集(就QPainter而言,>600000不再是中等的)背后的总体思路是为不同的缩放级别实现多个数据集。在这里QWTPlot WeedingFitter可以提供帮助(不要在replot中使用它!)-但是您需要Qwt6


<>但是最好在QWT支持频道,我不经常在这里阅读。

Qt 4.7是关于性能的改进,所以你应该考虑升级! AFAIR Qt 4.6中的光栅绘制引擎(使用QWS或Windows的引擎)在QPaint::drawPolyline()中存在严重的性能问题,其中时间随着点数的增加而增加,超过了线性(猜测涉及到一些算法(n*n)),对于600000条线的曲线,这会对您产生巨大的影响

对于您的用例,最快的选项是Qt4/X11,因为它是真正的硬件加速。请注意,对于Qt 4.8,您必须手动启用“本机”图形系统(在X11的默认设置之前),并且Qt5/X11不再加速


使用C++时,可以使用QWT 6.1,在这里您也可以选择基于OpenGL的画布。我也有一些代码,通过离线QGLPixelBuffer呈现一个pixmap,这很可能使它成为QWT6.2

我使用的是Qt版本4.6.3,你对抗锯齿非常感兴趣。一旦我删除了这条线,它运行得很好!谢谢