10
votes

Obtenez le contenu d'un Qcombobox

J'ai besoin d'obtenir un qstringlist ou un tableau contenant tous les qstring s dans un qcombobox .

Je ne trouve pas de qcombobox méthode qui, en fait, je ne peux même pas trouver une méthode qabstractTemModel qui fait cela.

est ce vraiment ma seule option: xxx


5 commentaires

Il n'y a pas de cette fonction, Afak. Pourquoi n'aimez-vous pas l'approche que vous utilisez (itération sur tous les articles de la liste déroulante)?


@vahancho, je suppose qu'il soit assez gaspillé, d'autant plus que la taille du qcombobox augmente.


Mais peut-être stocker le contenu de la liste déroulante dans un autre conteneur est également gaspillé? Pourquoi as-tu besoin de cela? Cela peut expliquer, pourquoi il n'y a pas de telle fonction dans l'API.


Qu'est-ce que le conteneur de valeurs vous obtient que la fonction membre qcombobox :: itemtext ne peut pas?


Je vais effacer qcombobox et le peupler, j'ai besoin d'identifier des éléments qui ont changé.


3 Réponses :


2
votes

Ne faites pas d'optimisation prématurée. Votre code est ok. Vous pouvez utiliser qobject_cast (combo.model ()); pour obtenir un accès étendu aux données Combobox.

En outre, vous pouvez implémenter votre propre QabstractTemModel qui stockera des données comme QStringList et lui donnera un accès.


0 commentaires

8
votes

qabstractTemmodel code> peut contenir des images, des arbres d'autres types de données pouvant être conservées dans qvariant code>. C'est pourquoi vous ne pouvez pas obtenir un qstringlist code> de celui-ci. C'est inutile.

Cependant, il existe une classe qstringlistmodel code> héritée de qabstractitemmodel code> qui est destiné à garder les chaînes. Et comme vous pouvez vous attendre à ce que la méthode stringlist () code>. P>

qcombobox code> vous permet de modifier un modèle par défaut qu'il utilise sur un autre. Par défaut, il utilise qstandarditemmodel code>. Changez-le à un modèle de liste de chaînes après avoir créé la liste déroulante. P>

QStringList list = cbModel->stringList();


1 commentaires

Ce n'est pas la solution que j'espérais, mais elle résout légitimement le problème.



9
votes

Votre réponse a l'air bien, mais vous pouvez également utiliser une QStringList au lieu d'un vecteur.

QStringList itemsInComboBox; 
for (int index = 0; index < ui->combo_box->count(); index++)
    itemsInComboBox << ui->combo_box->itemText(index);


0 commentaires