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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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