Подтвердить что ты не робот

Как вы получаете дочерние элементы виджетов в Qt?

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

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

У меня есть:

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

Ответ 1

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

Чтобы получить кнопку, вы можете попробовать:

QPushButton* button = pWin->findChild<QPushButton*>("Button name");

Ответ 2

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