Как «вытащить» данные из c ++ в qml? - PullRequest
0 голосов
/ 26 марта 2019

Я хочу "извлечь" данные из c ++ в qml следующим образом:

   Component.onCompleted: {
        MySettings.loadMainWindowPosition(aAppWnd.x, aAppWnd.y, aAppWnd.width, aAppWnd.height, aAppWnd.visibility);
    }

Когда MySettings регистрируется следующим образом:

context->setContextProperty("MySettings", m_settings);

Но когда я делаю подпись функции, как это:

void MySettings::loadMainWindowPosition(int& x, int& y, int& width, int& height, int& visibility)

Я получил следующую ошибку:

qrc: /GUI/App.qml: 35: Ошибка: неизвестный тип параметра метода: int &

Итак, как правильно "вытащить" данные внутри qml из c ++?

UPDATE

Я объясню лучше. Теперь я могу вызывать функцию c ++ (и отправлять параметры) из qml:

   Component.onCompleted: {
        MySettings.someFunc(111, 222);
    }

В коде c ++ я получаю вызов функции со значениями параметров "111" и "222".

Но я хочу изменить эти параметры в c ++. Я хочу что-то подобное:

   Component.onCompleted: {
        var a;
        var b;
        MySettings.someFunc(a, b);
    }

Я хочу установить в параграфе кода c ++ значения "333" и "555". Поэтому после вызова MySettings.someFunc (a, b) я ожидал, что (a == 333) и (b == 555).

Как это сделать?

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Передача значений по ссылке не работает при вызове функций c ++ из QML.Если вы хотите синхронизировать вызовы, используйте ссылку в коде C ++:

QVariantList MySettings::someFunc(int a, int b){

        QVariantList list;
        list.append(a + 5); // edit the passed values here
        list.append(b + 5); // edit the passed values here
        return list;
    }

и что-то подобное в коде QML:

var test = gapi.someFunc(3,2); // pass values here and get the new ones
console.log("The return data" + test);
1 голос
/ 27 марта 2019

Не пытайтесь получить возвращаемые значения в качестве ссылочных параметров при вызове функций C ++ из QML.Вместо этого используйте возвращаемые значения.Чтобы передать более одного значения за один вызов, определите свой метод C ++ как

Q_INVOKABLE QVariantList someFunc() { ... }

и используйте его в QML через

Component.onCompleted: {
    var returnValues = MySettings.someFunc();
    //access the returnValues via list indices here:
    var a = returnValues[0];
    var b = returnValues[1];
}
...