2013-11-22 7 views
5

Ich habe eine Benutzeroberfläche mit Qt Designer entworfen, und ich habe die Tab-Reihenfolge mit der "Tab-Reihenfolge bearbeiten" -Modus.Get Fokus (oder Tab) Reihenfolge

Nun, was ich (aus einem anderen Grund, nicht so wichtig) wissen möchte ist, wie man die Tab-Reihenfolge eines bestimmten QWidget in der UI bekommt?

Ich meine, wenn ich mehrere Widgets haben, und sagen, dass die Tab-Reihenfolge festgelegt wurde, ist es eine Möglichkeit, wie etwas zu tun:

int nb = widget1->getTabOrder(); 

Antwort

10

Es gibt keinen Weg, um die Tab-Reihenfolge als eine ganze Zahl zu erhalten. Wenn Sie in den C++ - Code schauen, den das UIC-Tool aus Ihrer UI-Datei erstellt, wird es ein paar Mal QWidget::setTabOrder() aufrufen, und diese Methode dauert nur zwei QWidget Zeiger. Daher speichert Qt intern nicht einmal die Tab-Reihenfolge als Ganzzahl, sondern als verkettete Liste von QWidget Zeigern.

Sie können diese verkettete Liste mit QWidget::nextInFocusChain() und QWidget::previousInFocusChain() abfragen. Dadurch erhalten Sie die gesamte Fokuskette des Widgets mit allen darin enthaltenen Kind-Widgets in der richtigen Reihenfolge. Dann können Sie die echte Tab-Reihenfolge-Liste abrufen, indem Sie ihre FocusPolicy, ihren aktivierten Zustand und ihren sichtbaren Status überprüfen, genau wie die interne Implementierung der QWidget::focusNextPrevChild()-Funktion. Wenn Sie hier wirklich einen Integer-Index benötigen, müssen Sie selbst einen Algorithmus entwickeln, der Indizes aus der erhaltenen Tab-Reihenfolge-Liste berechnet.

Verwandte Themen