2010-11-30 4 views
21

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

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

у меня есть:

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

ответ

44

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

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

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

Как использовать QListIterator? – Owen 2010-11-30 10:15:16

2

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

Смежные вопросы