Как вы получаете детей виджета в Qt? - PullRequest
22 голосов
/ 30 ноября 2010

Я симулирую нажатия клавиш в приложении через функцию Qt KeyPress. Все KeyPress работают нормально. Однако, когда я передаю QT::Key_Enter, который должен нажать кнопку OK в текущем активном окне, или QT::Key_Cancel для кнопки отмены, он ничего не делает.

Я думаю, может быть, потому что эти кнопки не имеют фокуса, а родительское окно имеет его. Как вы получаете детей из окна? или, вернее, найдите на нем кнопку «ОК» или «Отмена», чтобы вы могли установить ее в качестве активного окна и затем успешно передать ключевые нажатия?

У меня есть:

QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?

Ответы [ 2 ]

52 голосов
/ 30 ноября 2010

Вы можете использовать функцию findChild с именем объекта, чтобы получить конкретных потомков.Вы также можете использовать findChildren, чтобы получить всех детей с одинаковым именем и выполнить итерацию по списку, используя foreach или QListIterator.

.:

QPushButton* button = pWin->findChild<QPushButton*>("Button name");
2 голосов
/ 30 ноября 2010

Возможно, вы захотите установить собственный фильтр событий на свой виджет, чтобы захватить ключевое событие и посмотреть, что на самом деле с ним происходит.

...