2013-11-22 16 views
5

Ho progettato un'interfaccia utente utilizzando Qt Designer e ho impostato l'ordine di tabulazione utilizzando la modalità "Ordine schede di modifica".Ottiene l'ordine di attivazione (o tab)

Ora quello che vorrei sapere (per un altro motivo, non è così importante) è come ottenere l'ordine di tabulazione di un QWidget specifica nell'interfaccia utente?

voglio dire se ho diversi widget, e dire l'ordine di tabulazione è stato impostato, c'è un modo per fare qualcosa di simile:

int nb = widget1->getTabOrder(); 

risposta

10

Non v'è alcun modo per ottenere l'ordine di tabulazione come un intero. Se si guarda il codice C++ che lo strumento uic crea dal proprio file ui, chiamerà lo QWidget::setTabOrder() un paio di volte e quel metodo richiede solo due puntatori QWidget. Pertanto, Qt internamente non memorizza nemmeno l'ordine di tabulazione come un numero intero, ma piuttosto come un elenco concatenato di puntatori QWidget.

è possibile interrogare quella lista incatenato con QWidget::nextInFocusChain() e QWidget::previousInFocusChain(). Questo ti dà l'intera catena di messa a fuoco del widget, contenente tutti i widget figli al suo interno, nell'ordine corretto. Quindi è possibile ottenere l'elenco degli ordini di schede reali controllando le loro proprietà focusPolicy, stato abilitato e visibile, proprio come l'implementazione interna della funzione QWidget::focusNextPrevChild(). Se hai davvero bisogno di un indice intero qui, devi inventare un algoritmo tu stesso che calcoli gli indici da quella lista di ordini di tabulazione ottenuta.