Home / Programmazione / C - C++ / Filtrare i risultati di una QTableWidget con una QLineEdit
Mattepuffo

Filtrare i risultati di una QTableWidget con una QLineEdit

Filtrare i risultati di una QTableWidget con una QLineEdit

In pratica, abbiamo una QTableWidget piena di righe, e vogliamo cercare al suo interno scrivendo in una QLineEdit.

Non è molto difficile ottenere questo risultato!

Prima di tutto aggiungiamo un SLOT nel file di intestazione del nostro QWidget:

private slots:
    void txtSearch(QString search);

Questa la sua implementazione:

void Articoli::txtSearch(QString search) {
    QString filter = search.toUpper();
    for (int i = 0; i < ui->tblArticoli->rowCount(); ++i) {
        bool match = false;
        for (int j = 0; j < ui->tblArticoli->columnCount(); ++j){
            QTableWidgetItem *item = ui->tblArticoli->item(i, j);
            if (item->text().contains(filter)) {
                match = true;
                break;
            }
        }
        ui->tblArticoli->setRowHidden(i, !match);
    }
}

Iteriamo su tutte le righe della QTableWidget, e facciamo il match con quanto scriviamo nella casella di testo.

A questo punto ci basta collegare la QLineEdit al metodo; quindi nel costruttore del nostro QWidget:

connect(ui->txtSearch, SIGNAL(textChanged(const QString &)), this, SLOT(txtSearch(const QString &)));

Tutto qua.

Enjoy!