2016-08-01 16 views
1

Ich habe eine kurze Frage. Ich möchte Klickereignisse in einer Baumstruktur mit unterschiedlichen Verhaltensweisen abfangen, je nachdem, auf welche Spalte geklickt wird. Ich glaube, es gibt ein Signal, das den Modellindex passiert ... aber wie identifiziert man die Spalte? Danke für die Hilfe.QT QTreeView klicken Ereignis auf spezifische Spalte

+1

Ich denke, ich fand die Antwort .. index.column() oder? –

Antwort

1

Überprüfen Sie das in QTreeView verwendete QItemSelectionModel, um das Auswahl- oder Klickereignis in einer Zeile oder Spalte zu behandeln. Machen Sie Ihre Baumansicht auswählbar und verwenden Sie eines der Standardsignale. Sie haben 3 verschiedenes Signal ein Click-Ereignis zu behandeln:

void currentChanged(const QModelIndex &current, const QModelIndex &previous) 
void currentColumnChanged(const QModelIndex &current, const QModelIndex &previous) 
void currentRowChanged(const QModelIndex &current, const QModelIndex &previous) 

das Signal mit einem benutzerdefinierten Schlitz Griff, und verwendet QModelIndex Parameter die aktuelle Zeile und Index zu erhalten. Beispiel:

void MainWindow::elementClicked(const QModelIndex& current, const QModelIndex& previous) { 
    const int row = current.row(); 
    const int column = current.column(); 
    qDebug() << "Clicked at " << row << column; 
} 
+0

Danke. Was meinst du: Überprüfen Sie QItemSelectionModel im QTreeView verwendet? –

+0

Die Signale, die ich angehängt habe, sind Signale der Klasse QItemSelectionModel. QTreeView verfügt über ein Standard-QItemSelectionModel, das jedes in der Struktur ausgewählte/deaktivierte Element benachrichtigt. So überprüfen Sie die: http://doc.qt.io/qt-5/qitemselectionmodel.html und http://doc.qt.io/qt-5.7/qtreeview-members.html – mohabouje