Как вы получаете детей виджета в Qt?

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

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

Я:

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

2 ответов


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

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

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

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