2010-12-01 10 views
0

J'essaye d'obtenir tous les widgets enfants de bouton d'une fenêtre. Les boutons ont été créés via QDialogButtonBox. Comment puis-je obtenir le bouton Annuler/OK/Sauvegarder?comment obtenir le nom d'un bouton créé par QDialogButtonBox?

J'ai:

QWidget *pWin = QApplication::activeWindow(); 
QList<QPushButton *> allPButtons = pWin->findChildren<QPushButton *>(); 
QListIterator<QPushButton*> i(allPButtons); 
while(i.hasNext()) 
{ 
    //identify which button is cancel/ok/save button here 
    /*Note: This is where I'm having trouble, getting the text of the 
    button here returns NULL. Any other way of Identifying which is 
    which? 
    Is it a special case when buttons are created through QDialogButtonBox?  
    */ 
} 

Répondre

3

Vous devez utiliser la méthode QDialogButtonBox::button(), pour obtenir le bouton de la role correspondante.

Par exemple:

QPushButton* pOkButton = pButtonBox->button(QDialogButtonBox::Ok); 
QPushButton* pCancelButton = pButtonBox->button(QDialogButtonBox::Cancel); 
// and so on... 

D'une manière générale, je dirais que c'est une mauvaise idée de trouver un bouton à partir de son texte, que ce texte pourrait changer lorsque vous internationalisé app.

+0

Comment obtenez-vous le bouton d'un bouton? Pouvez-vous me donner un exemple? – Owen

+0

Vous devez commencer à partir de votre objet 'QDialogButtonBox' (dans votre question, vous utilisez 'pWin-> findChildren', et je ne comprends pas pourquoi.) A partir de votre objet' QDialogButtonBox', vous pouvez obtenir les rôles des boutons affichés avec la propriété 'standardButtons' –

+0

..ou Si vous avez un pointeur sur un 'QPushButton' qui est affiché par le' QDialogButtonBox', vous pouvez obtenir son rôle avec 'QDialogButtonBox :: buttonRole (pPushButton)'. –

0

Une façon est par text paramètre du constructeur, comme QPushButton(const QString & text, QWidget * parent = 0):

QPushButton* buttonSave = new QPushButton("Save"); 
// etc.. 
while(i.hasNext()) 
{ 
    //identify which button is cancel/ok/save button here 
    if(i.next()->text() == "Save") { 
    // do something to save push button 
    } 
} 
+1

L'obtention du texte renvoie une chaîne vide. :( – Owen

+0

Owen: vous devez assigner une chaîne de caractères au bouton lorsque vous l'instanciez – vls

+1

Les boutons créés à l'aide de QDialogButtonBox n'ont besoin d'aucun texte à assigner, il vous suffit de passer les boutons que vous voulez voir apparaître et de les marquer eux-mêmes. Je comprends pourquoi il renvoie une chaîne vide quand j'obtiens le texte du bouton ... – Owen