Überprüfe einfach, ob der Rückgabewert von
ist %Vor%ist
%Vor% Gibt es eine Möglichkeit festzustellen, ob ein QTableView
einen offenen Editor in der aktuellen Zelle hat? Ich muss die folgende Situation behandeln:
Ich sehe, wie man den aktuellen Gegenstand bekommt, und kann den Delegierten für diesen Gegenstand bekommen, aber ich sehe keine isEditMode()
Eigenschaft, die ich hoffte zu finden.
Kann mir jemand in die richtige Richtung zeigen?
Geben Sie Ihrem Stellvertreter eine Unterklasse, sodass er einen Zugriffsmechanismus enthält, der Ihnen bei der Bearbeitung sagt:
%Vor% Dann können Sie einfach den Delegierten überprüfen, um zu sehen, was vor sich geht. Alternativ und / oder wenn Sie mutable
nicht mögen, können Sie Signale aussenden, damit Sie wissen, in welchem Zustand sich der Delegierte befindet.
Überprüfe einfach, ob der Rückgabewert von
ist %Vor%ist
%Vor%Geben Sie Ihrem Stellvertreter eine Unterklasse, sodass er einen Zugriffsmechanismus enthält, der Ihnen bei der Bearbeitung sagt:
%Vor%Dann können Sie einfach den Delegierten überprüfen, um zu sehen, was vor sich geht. Alternativ und / oder wenn Sie %code% nicht mögen, können Sie Signale aussenden, damit Sie wissen, in welchem Zustand sich der Delegierte befindet.
Gibt es eine Möglichkeit festzustellen, ob ein %code% einen offenen Editor in der aktuellen Zelle hat? Ich muss die folgende Situation behandeln:
Ich sehe, wie man den aktuellen Gegenstand bekommt, und kann den Delegierten für diesen Gegenstand bekommen, aber ich sehe keine %code% Eigenschaft, die ich hoffte zu finden.
Kann mir jemand in die richtige Richtung zeigen?
Sie können %code% ableiten, um auf die Funktion %code% zugreifen zu können, die leider geschützt ist. Allerdings habe ich das nicht versucht.
Wenn Sie bereits eine Unterklasse %code% haben, können Sie mit ihr verfolgen, ob ein Editor gerade geöffnet ist. Sie können jedoch nicht %code% / %code% verwenden, da %code% nicht aufgerufen wird, wenn der Benutzer die Bearbeitung abbricht. Stattdessen können Sie die Erstellung und die Zerstörung des Editors selbst verfolgen.
%Vor%Implementierung:
%Vor%Bei einigen Gelegenheiten, z.B. Wenn Sie mit den Cursortasten zum nächsten Element im Baum gehen, erstellt Qt zuerst den neuen Editor und dann den alten. Daher muss %code% eine ganze Zahl anstelle von bool sein.
Leider ist %code% eine %code% -Funktion. Daher können Sie kein %code% -Member erstellen. Erstellen Sie stattdessen einen Zeiger auf ein %code% und verwenden Sie das.
Wenn Sie den Index des bearbeiteten Elements kennen, können Sie %code% aufrufen und versuchen, ihn zu konvertieren. Wenn es gültig ist, wissen Sie nicht nur, dass Sie gerade bearbeiten, sondern auch Ihr Editor-Widget zur Hand haben.
%Vor%Hier ist eine Idee, es ist sogar hilfreich, das Edit / Combo-Widget zu erhalten, bevor die Bearbeitung beginnt ...
geben nur ein Signal aus und konsumieren es im Hauptfenster ... das ist es, was ich benutzt habe, um ein Kombinationsfeld in QTableWidget zu bekommen, bevor ich es bearbeite ...
Erstellen Sie zuerst ein Signal in ComoBoxItemDelegate ...
%Vor%gibt dann das Signal in der createEditor-Methode aus ...
%Vor%und im MainWindow eine Funktion deklarieren, um das Singal zu empfangen ...
%Vor%Dann schließe es endlich im Konstruktor von MainWindow an ...
%Vor%Verbinden Sie sich mit dem zugrunde liegenden Modell dataChanged Signal
%Vor%Sie können prüfen, ob die Zelle, in der sich die Daten geändert haben, mit dem currentIndex
übereinstimmt %Vor%Sie können nicht wissen, ob die aktuelle Zelle einen offenen Editor gerade hat, aber Sie können überprüfen, ob die Ansicht in QAbstractItemView :: EditingState
ist %Vor%Es sollte ausreichen, um zu tun, was Sie wollen.
Verbinden Sie sich mit dem zugrunde liegenden Modell dataChanged Signal
%Vor%Sie können prüfen, ob die Zelle, in der sich die Daten geändert haben, mit dem currentIndex
übereinstimmt %Vor%Sie können nicht wissen, ob die aktuelle Zelle einen offenen Editor gerade hat, aber Sie können überprüfen, ob die Ansicht in QAbstractItemView :: EditingState
ist %Vor%Es sollte ausreichen, um zu tun, was Sie wollen.
Sie können QTableView
ableiten, um auf die Funktion state()
zugreifen zu können, die leider geschützt ist. Allerdings habe ich das nicht versucht.
Wenn Sie bereits eine Unterklasse QStyledItemDelegate
haben, können Sie mit ihr verfolgen, ob ein Editor gerade geöffnet ist. Sie können jedoch nicht setEditorData
/ setModelData
verwenden, da setModelData
nicht aufgerufen wird, wenn der Benutzer die Bearbeitung abbricht. Stattdessen können Sie die Erstellung und die Zerstörung des Editors selbst verfolgen.
Implementierung:
%Vor% Bei einigen Gelegenheiten, z.B. Wenn Sie mit den Cursortasten zum nächsten Element im Baum gehen, erstellt Qt zuerst den neuen Editor und dann den alten. Daher muss m_editorCount
eine ganze Zahl anstelle von bool sein.
Leider ist createEditor()
eine const
-Funktion. Daher können Sie kein int
-Member erstellen. Erstellen Sie stattdessen einen Zeiger auf ein int
und verwenden Sie das.
Hier ist eine Idee, es ist sogar hilfreich, das Edit / Combo-Widget zu erhalten, bevor die Bearbeitung beginnt ...
geben nur ein Signal aus und konsumieren es im Hauptfenster ... das ist es, was ich benutzt habe, um ein Kombinationsfeld in QTableWidget zu bekommen, bevor ich es bearbeite ...
Erstellen Sie zuerst ein Signal in ComoBoxItemDelegate ...
%Vor%gibt dann das Signal in der createEditor-Methode aus ...
%Vor%und im MainWindow eine Funktion deklarieren, um das Singal zu empfangen ...
%Vor%Dann schließe es endlich im Konstruktor von MainWindow an ...
%Vor%Tags und Links qt qtableview