通过信号从QML接收QChart或QChartView对象

Receiving QChart or QChartView object from QML via signal

本文关键字:QChart QChartView 对象 接收 QML 信号      更新时间:2023-10-16

我需要访问 *.qml 中声明的 ChartView 项目。

我试图通过信号将其(ChartView { id: scopeViewTop})从QML传递到C++

main.qml:

onClick: {core.rcvQChart(mainForm.rootRect.mainSplitView.chartsNControls.
                                   chartsSplitView.scopeViewTop}

核心.h:

public slots:
    void rcvQChart(QtCharts::QChartView *chartObj);

核心.cpp:

void Core::rcvQChart(QtCharts::QChartView *chartObj){
    qDebug() << "    rcvQChart() called";
    chartObj->hide();
}

如果我在接收的对象上使用任何方法,这会导致段错误。

从C++访问在 QML 中创建的具有特定 id 的对象的正确方法是什么?

解决方案是将QML项目作为QObject发送/接收,而不是作为QChartView:

void Core::rcvQChart(QObject *chartObj){
    qDebug() << "received: " << chartObj;
    qDebug() << "visible ? " << chartObj->property("visible");
    chartObj->setProperty("visible", "false");
    qDebug() << "visible ? " << chartObj->property("visible");
}

输出:

received:  ScopeViewTop_QMLTYPE_15(0x2735d20, name = "chartViewTop")
visible ?  QVariant(bool, true)
visible ?  QVariant(bool, false)