[Solved] QT TableView Wenn ein Item geändert wird, ein SLOT ausführen



  • Guten tag,
    ich bin gerade dabei, mich in QT einzuarbeiten. Als mein erste kleines Projekt programmiere ich ein Stundenplan. Der Stundenplan wird in einer extra Datei abgespeichert und immer dann gelsen, wenn man ihn braucht. Jedes Fach hat auch seine eigene Farbe. Ich möchte jetzt gerne, wenn ein Fach geändert wurde, dass heißt wenn man auf ein Item im TableView klickt und dies bearbeitet, soll ein Slot oder eine Funktion aufgerufen werden, mit der ich abfragen kann, welches Item geändert wurde (rows, cows) und welchen Text das Item jetzt hat.

    Meine Ansätze sehen so ähnlich aus:

    connect(ui->tableWidget, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)), SLOT(update_lesson()));
    

    oder

    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), SLOT(update_lesson()));
    

    der Slot update_lesson ist dann dafür da um die Stunde upzudaten zum beispiel die aktuelle Farbe zu wechseln.
    Mein Problem ist aber, wie ich jetzt abfragen kann, welches Item geändert wurdde und wie sich der Text geändert hat? Hat da jemand vielleicht irgendwelche Ansätze?



  • Okay ich bin jetzt einen kleinen Schritt weiter. Ich habe im Internet mehrmals gefunden, dass man mit cellChanged(int,int) herausfinden kann, welches Item geändert wurde. Das habe ich jetzt mal versucht so zu realisieren:

    connect(ui->tableWidget, SIGNAL(cellClicked(int,int)), SLOT(update_lesson(int row, int cow)));
    

    und hier der Slot update_lesson, die Position will ich in einer Textbox anzeigen lassen, um das ganze mir einfach zu verdeutlichen wie das funktioniert:

    void MainWindow::update_lesson(int row, int cow)
    {
        ui->lineEdit->setText(row + "," + cow);
    }
    
    doch update_lesson wird nicht einmal aufgerufen, was mache ich falsch?
    


  • Okay das ganze hat sich geklärt sry wegen des Posts, habe es selbst raus gefunden:
    Signal zur abfrage, ob sich ein Item geändert hat

    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), SLOT(update_lesson(int, int)));
    

    Slot zum ändern des Faches, hab mal die anderen weg gelassen 😉

    void MainWindow::update_lesson(int row, int cow)
    {
        QString line = ui->tableWidget->item(row, cow)->text();
    
        if(line == "Englisch")
        {
            ui->tableWidget->item(row, cow)->setBackgroundColor(Qt::yellow);
        }
    }
    

Anmelden zum Antworten