gpt4 book ai didi

python - 将 QML 的 ChartView 保存到 PyQt5 中的图像文件

转载 作者:行者123 更新时间:2023-12-04 08:55:51 24 4
gpt4 key购买 nike

我的方法几乎是这样的:
图表.qml:

Window {
ChartView {
id: chartView
// ...
}

Button {
text: "save"
onClicked: manager.save(chartView)
}
}
经理.py:
class Manager(QObject):
@pyqtSlot(QObject)
def save(self, chartview):
img = chartview.grab()
img.save(MY_DEFAULT_PATH)
当然,问题在于 Manager.save() 内部图表 View 相当于 C++ 的 QObject*它没有“抓取”方法。但它可以降级为 QChartView* (或至少 QWidget* ),这种方法具有。在 C++ 中,我可能会用 qobject_cast 来做。
我的问题是:
  • 在 PyQt 中这种向下转型可行吗?
  • 如果没有 - 您知道如何以不同的方式完成吗?
  • 最佳答案

    在给出答案之前,最好先澄清帖子中的一些错误:

  • QML ChartView 是一个项目,不同于 QChartView 是一个 QWidget。该 Item 是使用来自 QGraphicsScene 和 QChart 的信息绘制的。考虑到上述情况,一种方法可能是访问 QGraphicsScene 和 QChart,并使用 render() QGraphicsScene 的方法。
  • 您可以通过 sip.cast() 使用 sip 进行转换。方法。
  • 在这种情况下,也没有必要进行向下转换,因为在签名中表明:
  • class Manager(QtCore.QObject):
    @QtCore.pyqtSlot(QtQuick.QQuickItem)
    def save(self, chartview):
    self.result = chartview.grabToImage()

    def handle_ready():
    self.result.saveToFile(MY_DEFAULT_PATH)
    delattr(self, "result")

    self.result.ready.connect(handle_ready)
    但是你可以使用grabToImage方法而不是变得太复杂,因为它是一个项目:
    import QtQuick 2.12
    import QtQuick.Controls 2.12
    import QtCharts 2.2

    ApplicationWindow {
    visible: true
    width: 640
    height: 480
    Button {
    id: btn
    text: "Save"
    anchors.top: parent.top
    onClicked: saveChart("chart.png")
    }
    ChartView {
    id: chartView
    anchors.top: btn.bottom
    width: parent.width
    anchors.bottom: parent.bottom
    LineSeries {
    XYPoint { x: 0; y: 0 }
    XYPoint { x: 1.1; y: 2.1 }
    }
    }

    function saveChart(filename){
    chartView.grabToImage(function(result) {
    result.saveToFile(filename);
    });
    }
    }

    关于python - 将 QML 的 ChartView 保存到 PyQt5 中的图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63834043/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com