Utiliser QFlags avec QMetaType
Bonjour,
j'ai un petit soucis sur l'utilisation conjointe de QFlags et QMetatype. J'ai peut être juste loupé une petite étape ou une erreur qui ne me saute pas aux yeux pour l'instant.
Donc imaginons que j'ai une énumération dans un namespace que j'instrumentalise en QFlags et que j'aimerais aussi instrumentaliser en QMetaType pour en bénéficier dans les QVariant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
namespace datatype {
enum DataType {
UNDEFINED = 0x1,
TYPE1 = 0x2,
TYPE2 = 0x4
};
Q_DECLARE_FLAGS(DataTypes, DataType)
}
Q_DECLARE_METATYPE(datatype::DataType)
Q_DECLARE_METATYPE(datatype::DataTypes)
Q_DECLARE_OPERATORS_FOR_FLAGS(datatype::DataTypes) |
maintenant, imaginons que j'utilise cela dans un QComboBox dont la méthode addItem prend justement en second argument un QVariant :
Code:
1 2 3 4
|
ui->typeComboBox->addItem("Type du paramètre", datatype::UNDEFINED);
ui->typeComboBox->addItem("Type1", datatype::TYPE1);
ui->typeComboBox->addItem("Type2", datatype::TYPE2); |
Je récupère maintenant lors d'un changement de valeur (currentIndexChanged(int)) le QVariant correspondant de la manière suivante :
Code:
1 2
|
datatype::DataTypes datatype = ui->typeComboBox->itemData(index).value<datatype::DataTypes>(); |
Malheureusement, je n'obtiens pas la bonne valeur mais uniquement 0.
Je peux obtenir la valeur sans instrumentaliser l'énumération avec QMetaType en faisant
Code:
datatype::DataTypes datatype = static_cast<datatype::DataTypes>(ui->typeComboBox->itemData(index).value<int>());
mais j'aimerais tout de même savoir pourquoi la méthode avec QMetaType ne fonctionne pas.
Merci d'avance :)