2010-11-09 17 views
0

J'ai une boîte de dialogue Qt avec plusieurs contrôles qui nécessitent un traitement plus ou moins uniforme. Je veux stocker des pointeurs dans un tableau et énumérer sur eux.widgets Qt enumerable

Sous Windows, j'utiliserais les ID de contrôle séquentiel et GetDlgItem(hDlg, IDC_BASEID + i) dans une boucle. Dans Cocoa, j'utiliserais des étiquettes de vue séquentielles ou les inclurais dans un conteneur invisible. Quelle est la façon Qt?

+0

double possible de [Comment atteindre les variables itérativement peu dont les noms ne diffèrent que par le nombre en C++?] (Http://stackoverflow.com/questions/566603/how-to-reach-iteratively-few-variables -which-names-diff-only-by-number-in-c) –

+2

S'il vous plaît voir ma réponse à la question liée, je crois qu'il fait ce que vous voulez. –

Répondre

0

Peut-être QObject::findChildren(QRegExp) peut faire l'affaire si les widgets ont des noms similaires.

QList<QLineEdit*> lineEdits = dialog->findChildren<QLineEdit*>(QRegExp("lineEdit[0-9]+")); 
foreach (QLineEdit* lineEdit, lineEdits) { 
    lineEdit->clear(); 
} 
0

La réponse de duper vous dit comment faire cela - mais vous ne devriez pas

La façon dont Qt est d'avoir le même emplacement (ie gestionnaire) enregistré pour tous les widgets - puis dans le gestionnaire d'événements utilise la champ dans l'événement pour vous dire quel widget a tiré et obtenir un pointeur.

+0

Le traitement du signal de multiplexage se fait facilement via QSignalMapper (note: signaux, pas d'événements). Cependant, faire la même chose pour les propriétés nécessite une énumération quelconque. Pensez à toutes les opérations de type "Effacer tout": où se trouve la fente? –

+0

Ok - si vous voulez activer ou remplir une liste de widgets, alors un vecteur de pointeurs peut être une bonne solution. Itérer sur eux pour voir qui a été pressé n'est pas. –