Come si ottiene figli di un widget in Qt?
Domanda
sto simulando pressione dei tasti a un'applicazione attraverso la funzione KeyPress di Qt. Tutto il lavoro bene le pressioni dei tasti. Tuttavia quando passo davanti a un QT::Key_Enter
che dovrebbe premere il pulsante OK della finestra attualmente attiva, o QT::Key_Cancel
per il pulsante Annulla, non fa nulla.
Sto pensando che forse, perché questi pulsanti non hanno la messa a fuoco, e la finestra madre stessa ha. Come si ottiene i figli di una finestra? o meglio trovare il pulsante OK o Annulla su di esso quindi è possibile impostare come l'activeWindow e quindi passare pressione dei tasti con successo?
ho:
QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?
Soluzione
È possibile utilizzare la href="https://doc.qt.io/qt-5.12/qobject.html#findChild" rel="noreferrer"> findChild
funzione findChildren per ottenere tutti i bambini che hanno lo stesso nome e la scorrere l'elenco utilizzando foreach
o QListIterator
.
Per ottenere un pulsante si può provare:
QPushButton* button = pWin->findChild<QPushButton*>("Button name");
Altri suggerimenti
Si potrebbe desiderare di mettere un evento filtro personalizzato sul widget per la cattura l'evento chiave e vedere cosa succede realmente ad esso.