Ajouter QObject dans la zone de liste déroulante de Qt
Question
J'ai une classe personnalisée j'ai créé, par exemple MyClass. Maintenant, comment ajouter une référence à la référence de MyClass comme second paramètre dans la zone de liste déroulante ci-dessous:
this-> UI-> comboBox-> addItem ( "item-1",);
Le but est quand même élément a été modifié est tiré, je veux obtenir cette instance de classe spécifique de MyClass et processus en conséquence.
La solution
D'abord, vous devez utiliser Q_DECLARE_METATYPE(MyClass*)
, de sorte que le type peut être utilisé dans QVariant
. Ensuite, vous pouvez ajouter l'élément comme ceci:
this->ui->comboBox->addItem("item-1", QVariant::fromValue(myClass));
Et le récupérer:
this->ui->combobox->itemData(x).value<MyClass*>();
Autres conseils
Au-dessus de la syntaxe de réponse est légèrement incorrecte,
utiliser Q_DECLARE_METATYPE (MyClass *), dans le fichier d'en-tête de MyClass, de sorte que le type peut être utilisé dans QVariant.
ajouter l'élément comme celui-ci:
this-> UI-> comboBox-> addItem ( "item-1", QVariant :: fromValue (myClass));
Et le récupérer: this-> UI-> combobox-> itemData (x) .value ();