2011-08-05 3 views
2

J'ai un formulaire Qt qui contient 2 messages de zone de liste déroulante. Le deuxième message de liste déroulante dépend du premier message de zone de liste déroulante. Je veux dire que les dates du deuxième message combobox dépendent de l'élément que je sélectionne dans la première liste déroulante. En ce moment j'ai différentes dates dans la première combobox. Mais le second combobox ne fonctionne pas. J'ai besoin de créer une méthode de connexion ou quoi? Thx! Apprécier! Quelqu'un pourrait-il me donner un petit exemple?ComboBox Qt Creator - comment créer un événement?

Répondre

5

C'est assez simple. Une zone de liste déroulante émet le signal currentIndexChanged qui vous indique également le nouvel index. Ecrivez une méthode qui accepte un entier et change la seconde combobox en fonction de l'entier (qui est l'indice de la sélection dans la liste déroulante 1).

Voici quelques sniplets de code d'un exemple de travail.

déclaration de la méthode dans la fenêtre/whatever tête de classe:

public slots: 
    void setI1(int index); 

remplissage combobox 1, la connexion du signal, par exemple, dans le constructeur:

i1Box->addItem("Neutral", 0); 
i1Box->addItem("2,856 K (Illuminant A, light bulb)", 2856); 
// ... 

connect(i1Box, SIGNAL(currentIndexChanged(int)), 
     this, SLOT(setI1(int))); 

La mise en œuvre de la méthode:

void ViewerWindow::setI1(int index) { 
    // either use index directly, or, as in this case we have items holding an int: 
    int i1 = i1Box->itemData(index).value<int>(); 
    // use the value to change second combobox here 
} 

Si cela ne fonctionne pas comme prévu, il est toujours utile d'imprimer une sortie de débogage dans la méthode qui devrait être appelé à voir où ça va mal dans la chaîne.

Référence: http://doc.qt.nokia.com/latest/signalsandslots.html