2017-03-22 1 views
0

J'appelle actuellement un proc stocké dans Oracle pour remplir un QComboBox en PYQT. Les données apparaissent comme ceci:Puis-je utiliser une chaîne comme index dans un QComboBox?

code: 'PAY_COMP' Description: Société de paiement '

code: 'USER_COMP' Description: Société de l'utilisateur'

Je veux montrer la description dans la combobox mais vous voulez utiliser le code comme index, est-ce possible? La raison en est, lorsque l'utilisateur sélectionne 'Payment Company', je veux envoyer 'PAY_COMP' au backend pour être mis à jour.

Ou existe-t-il une autre façon de l'implémenter?

Répondre

1

Je ne connais pas Python, mais au moins en C++, vous pouvez attacher des données QVariant à chaque élément de la liste déroulante. Un QVariant peut être pratiquement tous les types, par exemple une chaîne ou une énumération.

Lors du remplissage de la zone de liste déroulante, j'utiliserais la fonction membre void QComboBox::addItem(const QString & text, const QVariant & userData = QVariant()). Ensuite, quand un élément est sélectionné par l'utilisateur et que je connais l'index courant de la liste déroulante, je peux utiliser QVariant QComboBox::itemData(int index, int role = Qt::UserRole) const pour obtenir le QVariant de cet élément, qui peut ensuite être converti en le type réel des données contenues, par exemple en utilisant QString QVariant::toString() const.

La zone de liste déroulante fournit également une méthode pour obtenir l'index d'un élément de données particulier: int QComboBox::findData(const QVariant & data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast<Qt::MatchFlags> (Qt::MatchExactly | Qt::MatchCaseSensitive)) const

Maintenant, vous devrez seulement transférer ce à python, mais je suppose que l'interface sera le même.

+0

Merci pour la réponse très détaillée, avec votre aide j'ai pu obtenir ce travail. Merci encore! – Goldglv

+0

De plus, pas sûr si je ceci correctement, quand à l'intérieur comboChanged, obtenir des résultats bizarres: #Weight pour l'indice dans la gamme (rowCount): \t combo = QtWidgets.QComboBox() combo.currentIndexChanged.connect (self.comboChanged) pour t comboBoxWeight: \t combo.addItem (t [0], QVariant (t [1])) self.tableWidgetCode.setCellWidget (index, 0, combo) – Goldglv

+0

Ok, avait une question. Maintenant que j'ai pu configurer les combobox avec un 'code' et une 'description', une fois que j'ai récupéré les données de la procédure, j'ai besoin de mettre les données dans la rangée appropriée. Donc, si j'obtiens les données 'PAY_COMP' renvoyées par le proc, comment puis-je le paramétrer dans la table de la liste déroulante pour afficher 'Payment Company'? Je suppose que j'ai besoin d'utiliser quelque chose comme: self.tableWidgetCode.cellWidget (0,0) .setItemData (ligne) mais je ne peux pas le faire fonctionner ... @user – Goldglv