Я бегаю по этому поводу кругами. Просто не могу понять сигналы и слоты.
Просто ищу какой-нибудь механизм, который может автоматически обновлять мой пользовательский интерфейс, когда возникает сигнал в моем С++.
Пример:
У меня есть две метки в Qml с текстом: _app.method, который возвращает значение.
У меня есть кнопка, которая onClicked запускает метод Q_INVOKABLE. Этот метод выдает сигнал, когда он выполнен, например, извлекает геокоординаты и обновляет значения, на которые опирается приведенный выше текст: назначения.
Что я хочу, так это ЧТО-ТО, чтобы обновить текст: назначения после изменения этих значений.
Мне просто нужно, чтобы эти сигналы/слоты были ясно объяснены. Единственные примеры в документации, похоже, предполагают ТОЛЬКО QML или C++, но не их сочетание. В примере кода есть примеры, но они не объясняются конкретно в документации.
Если бы у вас было простое описание, я уверен, что смог бы адаптироваться к нему. Например, 1: определите это в QML, 2: определите это в файле hpp, 3: определите это в файле cpp.
Я пытался использовать QObject setPropery("text","value"), но мое приложение вылетает при попытке сделать это.
Скажи мне, если я ошибаюсь...
1) в 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) в ГЭС:
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) в КПП:
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);
}
Итак, что происходит, так это то, что в QML метод onClick СОЕДИНЯЕТ сигнал с функцией QML; это означает, что теперь мы прослушиваем изменение значения, и когда это произойдет, эта функция будет вызвана. ЗАТЕМ мы меняем значение... так как Q_PROPERTY устанавливает значение записи в функцию с именем setValue, setValue вызывается с новым значением; внутренне m_iValue изменяется, и происходит выброс, который сообщает всем, кто слушает valueChanged, что есть новое значение.
Эй, мой QML слушает это! (через скрипт _app.valueChanged.connect). Итак, объект QML (Кнопка), который слушал это, вызывает функцию onValueChanged с новым значением (из-за эммита valueChanged(m_iValue).
Пожалуйста, скажи мне, я понял это??!?!