Как вы получаете детей виджета в Qt?
Вопрос
Я моделирую ключи к приложению через функцию QT Keypress. Все клавиши работают нормально. Однако, когда я прохожу QT::Key_Enter
который должен нажать кнопку OK в настоящее время активного окна, или QT::Key_Cancel
Для кнопки отмены это ничего не делает.
Я думаю, может быть, потому что эти кнопки не имеют внимания, и у самого родительского окна есть. Как получить детей окна? Или, скорее, найдите на ней кнопку «ОК» или «Отмена», чтобы вы могли установить ее как ActiveWindow, а затем успешно перенести клавиши?
У меня есть:
QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
Решение
Вы можете использовать findChild
Функция с именем объекта, чтобы получить конкретных детей. Вы тоже можете использовать findChildren
Чтобы получить всех детей, у которых одно и то же имя и итерация через список, используя foreach
или QListIterator
.
Чтобы получить кнопку, которую вы можете попробовать:
QPushButton* button = pWin->findChild<QPushButton*>("Button name");
Другие советы
Вы можете поместить пользовательский Фильтр событий На вашем виджете, чтобы захватить ключевое событие и посмотреть, что на самом деле происходит с ним.