Sto scrivendo il codice di test che verrà automaticamente ripetuto attraverso tutti i Q_PROPERTY di widget e alcune proprietà stanno utilizzando tipi registrati tramite qRegisterMetaType. Se voglio leggere/scrivere questi in QVariant ho bisogno di usare QVariant :: UserType quando li memorizzi in una variante. Fin qui tutto bene.Come verificare QVariant di tipo QVariant :: UserType è un tipo previsto?
Ma quando voglio testare le letture e le scritture di queste proprietà, ho bisogno di conoscere anche il loro tipo. Per cose che sono già tipi qt standard, posso farlo tramite QVariant :: type() ma dato che ho un sacco di tipi utente, come si farebbe?
dalle API di QVariant, ho notato questo:
bool QVariant::canConvert (Type t) const
ma io sono un po 'dubbio se questo porterà a tipi sbagliati in caso di enumerazioni?
Quindi, quale sarebbe il modo infallibile per verificare quale tipo di utente è memorizzato in QVariant?
Tuttavia , sembra che nel caso di QVarian t :: Variante UserType, il metodo typeName() restituisce "UserType" e typeName() restituisce il valore enumerativo QVariant :: UserType. Quindi entrambi sono inutili – rasjani
I tempi degli oggetti vanno bene, posso fare il controllo anche con typecasting così il tuo esempio funziona anche bene. Ma la mia domanda riguardava enum, che non è un tipo di classe e si può tipicamente digitare qualsiasi variabile numerica in un enum. Ma come detto. Controllerò il tuo codice. – rasjani
Ah, scusa, non ho notato quella parte. Ho provato e sembra che sia possibile registrare un tipo enum con Q_DECLARE_METATYPE o qRegisterMetaType e usarlo allo stesso modo. I documenti parlano solo di classe o struct con costruttore pubblico, costruttore e distruttore di copia, quindi non ne sono completamente sicuro, ma penso che dovrebbe funzionare per qualsiasi tipo che abbia la stessa interfaccia implicita per creazione, copia e distruzione. – Leiaz