2016-07-13 13 views
0

Ich möchte das in QML definierte Objekt von einem Steckplatz in C++ aus ändern. In Steckplatz startButtonClicked() starte ich den Timer, der jede Sekunde den Steckplatz getData() aufruft. Wie kann ich die in QML definierte Beschriftung von C++ - Steckplatz genData() ändern? Jetzt bin ich in der Lage von main.cpp nur ändernÄndern des QML-Objekts vom C++ - Steckplatz

class LogicClass : public QObject 
{ 
     Q_OBJECT 
public: 
    LogicClass(); 
    ~LogicClass(); 

public slots: 
    void startButtonClicked(const QVariant &v); 
    void getData(); 
}; 

Haupt:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    class LogicClass logicClass; 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); 

    QObject *rootObject = engine.rootObjects().first(); 
    QObject *qmlObject = rootObject->findChild<QObject*>("startButton"); 

    QObject::connect(qmlObject, SIGNAL(qmlSignal(QVariant)),&logicClass, SLOT(startButtonClicked(QVariant))); 

    return app.exec(); 
} 

qml:

import QtQuick 2.5 
import QtQuick.Controls 1.4 
import QtQuick.Dialogs 1.2 

ApplicationWindow { 
    id: window 
    objectName: "window" 
    visible: true 
    width: 640 
    height: 520 
    title: qsTr("MY app") 
     Button { 
      id: startButton 
      objectName: "startButton" 
      x: 25 
      text: qsTr("Start") 

      signal qmlSignal(var anObject) 

      MouseArea { 
        anchors.fill: parent 
        onClicked: startButton.qmlSignal(startButton) 
       } 
     }  
     Label { 
      objectName: "latitudeLabelValue" 
      id: latitudeLabelValue 
      y: 478 
      width: 50 
      text: qsTr("") 
     } 

    } 

} 

Antwort

0

Passing einen Zeiger auf rootObject-LogicClass() kann eine Lösung sein.

QObject *rootObject = engine.rootObjects().first(); 
class LogicClass logicClass(rootObject); 

Speichern Sie es als ein Parameter einer Klasse, und verwenden Sie es. this->rootObject->rootObject->findChild<QObject*>("latitudeLabelValue");

und dann die setProperty() Funktion.

1

Sie haben die setProperty Methode verwenden:

QObject *lblLatitute = rootObject->findChild<QObject*>("latitudeLabelValue"); 

    lblLatitute->setProperty("text", "234.234"); 

Aber betrachten Sie das Modell/view/delegieren Paradigma zu verwenden.

Verwandte Themen