Как вы получаете дочерние элементы виджетов в 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?
Ответы
Ответ 1
Вы можете использовать функцию findChild
с именем объекта, чтобы получить конкретных потомков. Вы также можете использовать findChildren
чтобы получить все дочерние findChildren
с одинаковым именем и выполнить итерацию по списку, используя foreach
или QListIterator
.
Чтобы получить кнопку, вы можете попробовать:
QPushButton* button = pWin->findChild<QPushButton*>("Button name");
Ответ 2
Возможно, вы захотите добавить в свой виджет фильтр событий, чтобы захватить ключевое событие и посмотреть, что на самом деле происходит с ним.