首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将QChart坐标映射到QChartView点?

如何将QChart坐标映射到QChartView点?
EN

Stack Overflow用户
提问于 2018-02-22 11:19:52
回答 1查看 1.7K关注 0票数 1

我想在QChart中制作一个橡皮筋窗口,但我不知道如何将QChart的坐标映射到QChartView。

例如(0,0)是一个QChart坐标,也许它在QChartView中是(10,10),如何转换它?我已经看到了Get mouse coordinates in QChartView's axis system 的答案

但它似乎与我的要求相反。

代码语言:javascript
复制
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来获得原点的坐标,但它似乎不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-23 11:16:56

如果要执行某些计算,则必须在显示小部件后执行,因为QChartView只是重新计算项目,在以下示例中,我将在矩形上创建一个QRubberBand,其中包含从QPointF(1, 17)QPointF(18, 2)的有关QChart的坐标

代码语言:javascript
复制
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_())

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48919092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档