Hallo,
ich hab einen Signal-Slot welcher das Anklicken des TabellenHeaders/Spaltenbezeichnung erkennen soll um dann eine Funktion aufzurufen. Im Programm wird die Tabelle immer mal wieder neu erstellt und dies führt dazu, dass scheinbar die alten connections erhalten bleiben und bei jedem neuen anzeigen der Tabelle das Signal so zu einer Mehrfachausführung der Funktion führt.
Die Funktion soll natürlich bei einem Klick nur 1x aufgerufen werden aber sie wird bei einem Klick so oft aufgerufen wie die Tabelle aktualisiert wurde. Wurde die Tabelle zB 5x aktualisiert dann wird bei einem Klick auf den SpaltenHeader die Funktion 5x aufgerufen. Daher meine Schlussfolgerung, die alten/vorigen connects bleiben weiter aktiv. Daher die Frage wie kann ich die alten connects löschen/beenden bevor ich die Tabelle neu aktualisiere? Ich habe es mit ui->tableWidget->disconnect(); versucht dies hat aber keine Wirkung. Hat jemand eine Idee?
Gruß
ich hab einen Signal-Slot welcher das Anklicken des TabellenHeaders/Spaltenbezeichnung erkennen soll um dann eine Funktion aufzurufen. Im Programm wird die Tabelle immer mal wieder neu erstellt und dies führt dazu, dass scheinbar die alten connections erhalten bleiben und bei jedem neuen anzeigen der Tabelle das Signal so zu einer Mehrfachausführung der Funktion führt.
C++:
void MainWindow::HeaderClicked(int logicalIndex)
{
QDebug << "HeaderClicked";
}
// beim Aktualisieren der Tabelle:
ui->tableWidget->clear();
ui->tableWidget->disconnect(); // test um alte connections zu beenden, geht aber nicht.
// erstelle neue aktuelle tableWidget Inhalte... (Code zur Verkürzung hier ausgelassen)
// Und danach signal-slot erstellen:
QHeaderView *header = qobject_cast<QTableView *>(ui->tableWidget)->horizontalHeader();
connect(header, &QHeaderView::sectionClicked, [this](int logicalIndex){HeaderClicked(logicalIndex);});
Die Funktion soll natürlich bei einem Klick nur 1x aufgerufen werden aber sie wird bei einem Klick so oft aufgerufen wie die Tabelle aktualisiert wurde. Wurde die Tabelle zB 5x aktualisiert dann wird bei einem Klick auf den SpaltenHeader die Funktion 5x aufgerufen. Daher meine Schlussfolgerung, die alten/vorigen connects bleiben weiter aktiv. Daher die Frage wie kann ich die alten connects löschen/beenden bevor ich die Tabelle neu aktualisiere? Ich habe es mit ui->tableWidget->disconnect(); versucht dies hat aber keine Wirkung. Hat jemand eine Idee?
Gruß
Zuletzt bearbeitet: