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

时间:2017-01-27 14:29:56

标签: c++ qt qml signals-slots

我需要访问在* .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的对象的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

解决方案是将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)