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

Receiving QChart or QChartView object from QML via signal

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

我试图通过信号

将它 (ChartView { id: scopeViewTop}) 从 QML 传递到 C++

main.qml:

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

core.h:

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

core.cpp:

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

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

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

解决方案是 send/receive 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)