каскады и сигналы / слоты

Я бегаю кругами по этому поводу. Просто не могу обернуть голову вокруг сигналов и слотов.

Просто ищу какой-то механизм, который может автоматически обновлять мой пользовательский интерфейс при появлении сигнала в моем 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).

Пожалуйста, скажите мне, что я понял это ??!?!

6

Решение

Если вы используете макрос 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 ();

10

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector