Я бегаю кругами по этому поводу. Просто не могу обернуть голову вокруг сигналов и слотов.
Просто ищу какой-то механизм, который может автоматически обновлять мой пользовательский интерфейс при появлении сигнала в моем C ++.
Пример:
У меня есть две метки в Qml, которые имеют текст: _app.method, который возвращает значение.
У меня есть кнопка, которая запускает метод Q_INVOKABLE. Этот метод генерирует сигнал, когда он сделан, например, выбирает геоординаты и обновляет значения, на которые опирается приведенный выше текст: назначения.
Что-то, что я хочу, чтобы обновить текст: назначения после изменения этих значений.
Мне просто нужно, чтобы эти сигналы / слоты объяснялись просто. Единственные примеры в документации, кажется, предполагают ТОЛЬКО QML или C ++, но не сочетание обоих. В примере кода есть примеры, но они не описаны конкретно в документации.
Если бы у вас было простое описание, я уверен, что я мог бы приспособиться к нему. Например, 1: определить это в QML, 2: определить это в файле hpp, 3: определить это в файле cpp.
Я пытался использовать setPropery QObject («текст», «значение»), но мое приложение падает при попытке этого.
Скажи мне, если я ошибаюсь …
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 с новым значением (из-за значения emit valueChanged (m_iValue).
Пожалуйста, скажите мне, что я понял это ??!?!
Если вы используете макрос Q_PROPERTY, нет необходимости явно связывать сигнал onValueChanged с функцией для изменения текста кнопки. А также вам не нужно излучать сигнал valueChanged с m_iValue. Внести следующие изменения в соответствующие файлы
QML:
Button {
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Center
id: aButton
text: _app.value
onClicked: {
_app.value = _app.value + 1
}
}
ГЭС:
signals:
void valueChanged();
CPP:
выпустить valueChanged ();
Других решений пока нет …