Wie kann ich eine QTableWidget sagen zu der Bearbeitung einer Zelle enden?

StackOverflow https://stackoverflow.com/questions/518447

  •  21-08-2019
  •  | 
  •  

Frage

Ich zeige ein Popup-Menü einige Werte in einem QTableWidget auszuwählen. Der niedrigste Punkt ist eine „Liste ändern“ -Eintrag, wenn ich es wähle ein neues Fenster sollte automatisch angezeigt und die QComboBox sollte verschwinden und die Zelle Rückkehr zu einem Qt :: DisplayRole Staat.

Jetzt Qt hat diese alle nett API-Aufrufe wie QTableWidget.edit() und QTableWidget.editItem(), was ich wirklich bin für eine QTableWidget.endEditing(), vorzugsweise ohne den Index der Zelle zu spezifizieren, obwohl ich, dass mit diesen Anruf bekommen konnte:

table.currentIndex()

... aber ich weiß nicht, ob ich, dass die aktuelle Zelle garantieren kann, wird die Zelle jederzeit bearbeitet werden.

Gibt es eine API diese Art von Editoren?

schließen

Popup-Menü

War es hilfreich?

Lösung

QTableWidget erbt 19 öffentliche Slots von QWidget. Einer von denen ist setDisabled (), die für das Widget und alle seine Kinder Eingabeereignisse deaktivieren sollte.

Ich würde versuchen:

table.setDisabled( true );
table.setDisabled( false );

Auch wenn Sie sagte, dass es bei Ihnen nicht funktioniert, gibt es eine alternative Methode: Wenn Sie wie das nicht (in der Tabelle den Fokus verliert, glaube ich), können Sie versuchen, mit EditTriggers . Zum Beispiel:

table.setEditTriggers( QAbstractItemView::NoEditTriggers );

Andere Tipps

table.setCurrentItem(None) ist das, was für mich gearbeitet. (Vergessen Sie nicht, Signale zu sperren, wenn Sie einige Cellchanged / ItemChanged Slot-Funktion verwenden.)

Dies ist mit PyQt. Für C ++ denke ich keine mit NULL ersetzen.

Unter Umständen können Sie QTableWidget.closePersistentEditor () verwenden, um den Editor zu schließen. Allerdings QAbstractItemView.closeEditor () kann näher an, was Sie wollen, zumal man mit dem QModelIndex-basierten API um bequem zu sein scheinen und bereits einen benutzerdefinierten Editor-Widget verwendet wird.

Ich kann nicht für die Liste Widgets sprechen. Aber, ich habe hier versucht, etwas ähnliches zu tun.

Ich war Doppelklick auf eine Zelle, und auf der Säule basierte, eine Unterform mit einer Liste zu bringen, dann, wenn die geschlossene Bewegung auf die nächste entsprechende Spalte auf dem Wert ausgewählt beruhte.

Mein Problem hat ich den Wert in der Zelle erhalten könnte und „Auswahl“ die nächste geeignete Zelle, aber die ursprüngliche Zelle blieb im Bearbeitungsmodus ausgewählt!

Es dämmerte schließlich auf mir, dass mein Doppelklicken Sie auf die Zelle wurde die Auswahl, das heißt. Bearbeitung.

Ein Ein-Klick wählt die Zelle jedoch keinen Bearbeitungsmodus öffnen.

Side Hinweis: Niemals, dass Unterform bekommen könnte wirklich modal zu handeln, so habe ich eine Schleife in der anrufenden Form: Während die Unterform sichtbar war, mit dem einzigen Code ist app.processEvents ()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top