Как получить роль QPushButton, созданного QDialogButtonBox? - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь получить все дочерние виджеты кнопки текущего активного окна.Кнопки были созданы через 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...      
}

Я получаю отрицательное значение при получении роли кнопки :(

Может кто-нибудь сказать мне, что не так с кодом?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2010

Нельзя вызывать нестатический метод, подобный этому. Вам нужно иметь переменную QDialogButtonBox и вызывать этот конкретный экземпляр для работы buttonRole().

QDialogButtonBox::ButtonRole role = myButtonBoxPtr->buttonRole(i.next());
1 голос
/ 15 декабря 2010

Вы создаете новый пустой QDialogButtonBox, который не имеет представления о buttons в списке allPButtons.Вызов buttonRole() для них возвращает -1 (InvalidRole), потому что buttons не в этом button-box.

Вы должны сделать, как написал jkerian, а myButtonBoxPtr должен указать на QDialogButtonBox, который ужев вашем окне.

Вы можете попробовать что-то вроде этого (если у вас есть один ButtonBox):

QDialogButtonBox *box = pWin->findChild<QDialogButtonBox *>();
foreach(QAbstractButton* button, box->buttons())
{ qDebug() << box->buttonRole(button); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...