Je classe C++ UserDois-je utiliser QVariant ou MyCustomType * pour passer un objet de Qml à C++?
class User : public QObject
{
Q_PROPERTY(QString login READ login WRITE setLogin NOTIFY loginChanged)
Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged)
...
}
Aussi je forme QML SignIn bouton qui appelle ce code lorsque vous cliquez dessus:
var user = userComponent.createObject()
user.login = loginTextField.text
user.password = passwordTextField.text
signInInteractor.signIn(user)
SignInInteractor est une classe C++
class SignInInteractor : public QObject
{
Q_INVOKABLE void signIn(User* user);
Q_INVOKABLE void signIn(QVariant user);
...
}
Et mon question est-ce que je devrais utiliser User*
ou QVariant
comme type d'argument? Quels avantages et inconvénients ont-ils?
Utilisez les types dérivés de QObject pour interagir avec QML lorsque cela est possible. Non seulement une meilleure vérification de type, ils exposent les propriétés et les méthodes invocables tout en emballant le type à QVariant implique que votre fonction C++ doit d'abord reconnaître le type et lui donner la valeur du variant. J'utiliserais la variante si j'ai besoin de passer différents types de paramètres à la fonction. – AlexanderVX