resetowanie ustawień ukrywania wiersza

0

witam, mam taką funkcję szukaj która ma za zadanie w jednej z wersji ukryć wiersz i... działa to oczywiście prawidłowo. Problem w tym, że gdy chcę przywrócić tabelę (skasować literę lub wyraz) do poprzedniej wersji (czyli ustawić aby każdy wiersz był widoczny) to tabela znika cała. Pomaga jedynie całkowite przeładowanie jej i zastanawiam się co spartoliłem.

    int rows=DatabaseView->rowHeight(0); //ilość wierszy.
    int columns=DatabaseView->columnWidth(0); //ilość kolumn.
    for(int i=0; i<rows; ++i)
    {
        DatabaseView->showRow(i); //myślałem żeby za każdy odwołaniem do funkcji najpierw ustawiać wszystkie wiersze jako widoczne ale to coś nie działa
    }
    bool *hideRows=new bool [rows];
    QString textCell;
    bool finded;
    //wyszukiwanie tekstu QtableView
    for(int i=0; i<rows; ++i)
    {
        DatabaseView->showRow(i); //ustawiam aby pokazywał każdy wiersz.
        hideRows[i]=1;
        for(int j=0; j<columns; ++j)
        {
            textCell=dataFromDatabase->data(dataFromDatabase->index(i,j)).toString();
            if((textCell.indexOf(findText->text())>=0)&&(!findText->text().isEmpty()))
            {
                hideRows[i]=0; //jeżeli znajdziemy dane w komórce to ustawiamy na hideRows[i] na 0 aby utrzymać wyświetlanie tego wiersza.
                //kolorowanie tła komórki
                dataFromDatabase->setData(dataFromDatabase->index(i,j), Qt::yellow, Qt::BackgroundRole);
                DatabaseView->update(dataFromDatabase->index(i,j));
            }
            else
            {
                DatabaseView->showRow(i);
                dataFromDatabase->setData(dataFromDatabase->index(i,j), Qt::white, Qt::BackgroundRole);
                DatabaseView->update(dataFromDatabase->index(i,j));
            }
        }
        //ukrywanie wierszy w których nie znaleziono szukanych danych.
        if(hideUnvalidRowsLineEdit->isChecked()&&(hideRows[i]==1))
        {
            DatabaseView->hideRow(i);
        }
    }
    delete [] hideRows;

}
 

może Wam uda się coś podpowiedzieć bo ja coś nie widzę błędu ;/

1

Spróbuj następującego kombosa:

view->setRowHidden(row,false/true);

a potem odświeżenie:

view->viewport()->update()
Puchaczov napisał(a)
    int rows=DatabaseView->rowHeight(0); //ilość wierszy.
    int columns=DatabaseView->columnWidth(0); //ilość kolumn.

Hmmmm...aby na pewno nie chodziło ci czasem o model->rowCount() i model->columnCount()? ;)

1

czy nie powinieneś użyć: QSortFilterProxyModel?

Z tego co widzę na szybkiego, to proste filtrowanie za pomocą tego wymaga ekstra 6 linijek kodu (tak sugeruje przykład w dokumentacji).

0

MarekR22 : Dzięki, zastanawiałem się właśnie nad nieco lepszym wyszukiwaniem niż latanie forem po co całej tabeli i wyławianie odpowiednich danych jednak ja miałem zamiar wykorzystać QMap do tego celu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1