我想在QChart中制作一个橡皮筋窗口,但我不知道如何将QChart的坐标映射到QChartView。
例如(0,0)是一个QChart坐标,也许它在QChartView中是(10,10),如何转换它?我已经看到了Get mouse coordinates in QChartView's axis system 的答案
但它似乎与我的要求相反。
import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries
from PyQt5.QtCore import QPointF, QEvent, QPoint, QRect
from PyQt5.QtWidgets import QApplication, QMainWindow, QRubberBand
class ChartView(QChartView):
def init_rubber_band(self):
chart = self.chart()
start1 = chart.mapToPosition(QPointF(0, 0))
start2 = chart.mapToScene(start1)
start3 = QPoint()
start3.setX(int(start2.x()))
start3.setY(int(start2.y()))
end = QPoint(200, 200)
self.rubber = QRubberBand(QRubberBand.Rectangle, self);
self.rubber.setGeometry(QRect(start3, end))
self.rubber.show()
app = QApplication(sys.argv)
series0 = QLineSeries()
series1 = QLineSeries()
series0 << QPointF(1, 15) << QPointF(3, 17) << QPointF(7, 16) << QPointF(9, 17) \
<< QPointF(12, 16) << QPointF(16, 17) << QPointF(18, 15)
series1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) \
<< QPointF(12, 3) << QPointF(16, 4) << QPointF(18, 3)
chart = QChart()
chart.addSeries(series0)
chart.addSeries(series1)
chart.createDefaultAxes()
chartView = ChartView(chart)
chartView.init_rubber_band()
window = QMainWindow()
window.setCentralWidget(chartView)
window.resize(400, 300)
window.show()
sys.exit(app.exec_())我使用mapToPosition来获得原点的坐标,但它似乎不起作用。
发布于 2018-02-23 11:16:56
如果要执行某些计算,则必须在显示小部件后执行,因为QChartView只是重新计算项目,在以下示例中,我将在矩形上创建一个QRubberBand,其中包含从QPointF(1, 17)到QPointF(18, 2)的有关QChart的坐标
class ChartView(QChartView):
def init_rubber_band(self):
chart = self.chart()
start_value = QPointF(1, 17)
end_value = QPointF(18, 2)
start = chart.mapToPosition(start_value)
end = chart.mapToPosition(end_value)
self.rubber = QRubberBand(QRubberBand.Rectangle, self)
self.rubber.setGeometry(QRect(start.toPoint(), end.toPoint()))
self.rubber.show()
app = QApplication(sys.argv)
series0 = QLineSeries()
series1 = QLineSeries()
series0 << QPointF(1, 15) << QPointF(3, 17) << QPointF(7, 16) << QPointF(9, 17) \
<< QPointF(12, 16) << QPointF(16, 17) << QPointF(18, 15)
series1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) \
<< QPointF(12, 3) << QPointF(16, 4) << QPointF(18, 3)
chart = QChart()
chart.addSeries(series0)
chart.addSeries(series1)
chart.createDefaultAxes()
chartView = ChartView(chart)
window = QMainWindow()
window.setCentralWidget(chartView)
window.resize(400, 300)
window.show()
chartView.init_rubber_band()
sys.exit(app.exec_())输出:

https://stackoverflow.com/questions/48919092
复制相似问题