我有C++類用戶我應該使用QVariant還是MyCustomType *將對象從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)
...
}
而且我有按鈕,呼叫點擊時這段代碼設爲Qml簽到形式:
var user = userComponent.createObject()
user.login = loginTextField.text
user.password = passwordTextField.text
signInInteractor.signIn(user)
SignInInteractor是一個C++類
class SignInInteractor : public QObject
{
Q_INVOKABLE void signIn(User* user);
Q_INVOKABLE void signIn(QVariant user);
...
}
和我問題是我應該使用User*
還是QVariant
作爲參數類型?他們有什麼優點和缺點?
儘可能使用'QObject'派生類型與QML進行交互。不僅更好的類型檢查,它們暴露屬性和可調用方法,而將類型封裝到'QVariant'意味着你的C++函數應該首先識別類型並將變量值賦值給它。如果我需要將不同類型的參數傳遞給該函數,我會使用該變體。 – AlexanderVX