2017-10-28 207 views
0

我想放大由許多正弦波彼此靠近組成的圖表,但是當我不小心點擊其中一條曲線(它們與圖像緊密結合在一起)時,橡皮筋不會被創建,因此縮放將被忽略,它只允許我放大圖表的白色邊框。PyQt5 QtChart忽略曲線上的橡皮條

任何想法如何解決它,所以如果我點擊曲線,那麼它也會放大?

的overrided功能:

class aview(QChartView): 
    def __init__(self, chart, parent): 
     super(aview, self).__init__(chart, parent) 
     self.setMouseTracking(True) 
     self.setInteractive(True) 
     self.setRubberBand(self.HorizontalRubberBand) 

呼叫到overrided功能:

class Window(QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     ... 
     curve = QLineSeries() 
     curve.setUseOpenGL(True) 
     curve.append(.........) # this isn't important for this question 
     ... 
     self.current = QWidget(self) 
     self.chart = QChart() 
     self.chart.legend().hide() 
     self.chart.addSeries(curve) 

     self.chart_view = aview(self.chart, self.current) 
     self.chart_view.setRenderHint(QtGui.QPainter.Antialiasing) 
     ... 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Window() 
    ex.show() 
    sys.exit(app.exec_()) 

圖表未經縮放: not zoomed

平鋪放大圖表(由正弦波的): zoomed

+0

請提供[mcve]。 – ekhumoro

+0

@ekhumoro我編輯了我的問題。 –

回答

0

好了,問題是OpenGL的,它創建於所有其他的頂部透明的窗口小部件是一個獨立的小工具,不能被動畫: https://doc.qt.io/qt-5/qabstractseries.html#useOpenGL-prop

系列繪圖的OpenGL加速意味着使用情況 需要快速繪製大量的點。它針對 效率優化,因此使用適用於非加速系列許多 功能它缺乏支持系列:

系列動畫不支持加速系列。

...

所以,簡單地註釋掉curve.setUseOpenGL(True)解決它。