2017-01-27 1 views
0

Ich brauche einen Zugriff auf ChartView-Objekt deklariert in * .qml.Empfangen QChart oder QChartView-Objekt von QML über Signal

habe ich versucht, es zu passieren (Chartview {id: scopeViewTop}) von QML zu C++ über Signal

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(); 
} 

Dies führt zu einem segfault, wenn ich eine Methode für das empfangene Objekt verwende.

Was ist der richtige Weg, um auf ein Objekt mit spezifischer ID zuzugreifen, die in QML aus C++ erstellt wurde?

Antwort

0

Die Lösung ist QML Artikel als QObject, nicht als QChartView zum Senden/Empfangen:

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

Ausgang:

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