2010-12-07 30 views
0

J'essaye d'obtenir tous les widgets enfants de bouton d'une fenêtre actuellement active. Les boutons ont été créés via QDialogButtonBox. J'essaie d'obtenir les rôles de chaque bouton afin que je puisse identifier le bouton OK, CANCEL ou SAVE. Cependant, je reçois une erreur avec le code suivant:Comment obtenir le rôle d'un QPushButton créé par un QDialogButtonBox?

QWidget *pWin = QApplication::activeWindow(); 
QList<QPushButton *> allPButtons = pWin->findChildren<QPushButton *>(); 
QListIterator<QPushButton*> i(allPButtons); 
while(i.hasNext()) 
{ 
    QDialogButtonBox *pButtonRole = new QDialogButtonBox(); 
    QDialogButtonBox::ButtonRole role = pButtonRole->buttonRole(i.next()); 
    qDebug() << "buttonRole: " << role << endl ; 
    //the value of role here is -1, which means it's an invalid role...  
} 

Je reçois une valeur négative lors de l'obtention du rôle du bouton :(

Quelqu'un peut-il me dire ce qui ne va pas avec le code

+0

Ou comment faire jkerian dit, ou si vous utilisez des boutons standard et ont simplement besoin l'un des boutons: QPushButton * ok = buttonBox- > button (QDialogButtonBox :: Ok) –

+0

J'ai essayé QDialogButtonBox pButtonRole = new QDialogButtonBox(); QDialogButtonBox :: ButtonRole rôle = pButtonRole-> buttonRole (i.next()); qDebug() << "buttonRole:" << rôle << endl; mais je reçois un rôle invalide ... -1 ... – Owen

Répondre

1

Vous créez un nouveau vide QDialogButtonBox qui n'a aucune idée de buttons dans la liste allPButtons. En appelant buttonRole() sur eux renvoie -1 (InvalidRole) car buttons ne sont pas dans ce button-box.

Vous devez faire comme jkerian a écrit et myButtonBoxPtr doit pointer vers le QDialogButtonBox qui est déjà dans votre fenêtre.

Vous pouvez essayer quelque chose comme ça (si vous avez un ButtonBox):

QDialogButtonBox *box = pWin->findChild<QDialogButtonBox *>(); 
foreach(QAbstractButton* button, box->buttons()) 
{ qDebug() << box->buttonRole(button); } 
+0

Je vois. Cependant, je ne peux pas comprendre comment obtenir l'instance de QDialogButtonBox. Ce que j'ai est une liste de tous les boutons dans une fenêtre. Comment puis-je obtenir l'instance de myButtonBoxPtr? – Owen

+0

Vous pouvez obtenir la liste des QDialogButtonBox de la même manière que vous avez la liste QPushButtons. – graphite

3
?

Vous ne pouvez pas appeler une méthode non statique comme ça. Vous devez avoir la variable QDialogButtonBox et appeler ce cas particulier pour buttonRole() travailler.

QDialogButtonBox::ButtonRole role = myButtonBoxPtr->buttonRole(i.next()); 
+0

J'ai essayé QDialogButtonBox pButtonRole = new QDialogButtonBox(); \t \t QDialogButtonBox :: ButtonRole rôle = pButtonRole-> buttonRole (i.next()); \t qDebug() << "buttonRôle:" << rôle << endl; mais je reçois un rôle invalide ... -1 ... – Owen