Ошибка: неизвестный тип параметра метода: QString & - PullRequest
1 голос
/ 10 апреля 2019

На стороне C ++ у меня был этот метод:

class MyClass : public QObject
{
    Q_OBJECT

    Q_INVOKABLE QVariant getFamily_byParentName(QString &parentName) const;

    // ...
}

Я вызывал метод C ++ для QML:

onButtonClicked: {
    myClass.getFamily_byParentName(items3D.model[0]) // items3D.model[0] is a string
}

Приведенный выше код генерировал эту ошибку в строке QMLmyClass.getFamily_byParentName(items3D.model[0]):

Ошибка: неизвестный тип параметра метода: QString &


Решение

Приведенная выше ошибка была устранена путем объявления QStringаргумент как const:

Q_INVOKABLE QVariant getFamily_byParentName(const QString &parentName) const;

Вопрос: почему?

1 Ответ

3 голосов
/ 10 апреля 2019

Механизм QML преобразует соответствующие типы данных путем копирования значений.

В вашем случае QString & - это ссылка на QString, которую нельзя скопировать, вместо этого можно скопировать const QString &.По этой причине у вас не может быть QObject в качестве аргумента, поскольку он не копируется, и вместо этого вы должны использовать QObject *, так как указатель копируется.

Это тот же принцип, что и у Q_SIGNAL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...