Biegam w kółko o tym. Po prostu nie mogę owinąć głowy sygnałami i gniazdami.kaskady i sygnały/gniazda
Po prostu szukam jakiegoś mechanizmu, który automatycznie aktualizuje mój interfejs, gdy pojawi się sygnał w moim C++.
Przykład:
Mam dwie etykiety w QML które mają tekst: _app.method która zwraca wartość.
Mam przycisk, który onClicked uruchamia metodę Q_INVOKABLE. Ta metoda emituje sygnał po zakończeniu, np. Pobiera geocordinates i aktualizuje wartości, o których mowa w powyższym tekście: przypisania.
Czego chcę, to COŚ, aby zaktualizować tekst: przypisania po zmianie tych wartości.
Po prostu potrzebuję tych sygnałów/gniazd wyjaśnionych w sposób oczywisty. Jedyne przykłady w dokumentacji wydają się przyjmować TYLKO QML lub C++, ale nie mieszankę obu. Przykładowy kod ma przykłady, ale nie jest szczegółowo objaśniony w dokumentacji.
Gdybyś miał prosty opis, na pewno mógłbym się do niego dostosować. Np. 1: zdefiniuj to w QML, 2: zdefiniuj to w pliku hpp, 3: zdefiniuj je w pliku cpp.
Próbowałem używać setPropery QObject ("tekst", "wartość"), ale moja aplikacja ulega awarii podczas próby tego.
Powiadom mnie jeśli się mylę ...
1) w QML:
Button {
id: aButton
text: _app.value
onClicked: {
_app.valueChanged.connect(aButton.onValueChanged);
_app.value = _app.value + 1;
}
function onValueChanged (val) {
aButton.text = "New value: " + val;
}
}
2) w HPP:
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
int value();
void setValue(int i);
signals:
void valueChanged(int);
private:
int m_iValue;
3) w KPP:
int class::value()
{
return m_iValue;
}
void class::setValue(int i)
{
// name is same as HPP WRITE Q_PROPERTY statement
m_iValue = i;
emit valueChanged(m_iValue);
}
Co się dzieje, że w QML, metoda onClick CONNECT S sygnał z funkcją QML; co oznacza, że teraz słuchamy zmiany wartości, a kiedy to nastąpi, ta funkcja zostanie wywołana. THEN, zmieniamy wartość ... ponieważ Q_PROPERTY ustawia wartość zapisu na funkcję o nazwie setValue, setValue jest wywoływana z nową wartością; wewnętrznie, zmienna m_iValue zostaje zmieniona i pojawia się emit, który mówi każdemu, kto nasłuchuje valueChanged, że istnieje nowa wartość.
Hej, mój QML tego słucha! (za pomocą skryptu _app.valueChanged.connect). Tak więc, obiekt QML (Button), który tego słuchał, ma funkcję onValueChanged, która została wywołana, z nową wartością (z powodu wartości emitChanged (m_iValue).
Proszę mi powiedzieć, że to wymyśliłem ?? !?!
Wow ... jakoś działa, dzięki magii SIGNAL/SLOT. Czy są jakieś specjalne słowa kluczowe, które sprawiają, że to działa? –
Nie każdy jestem świadomy –