resetowanie ustawień ukrywania wiersza

Odpowiedz Nowy wątek
2011-09-27 00:02
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 ;/

edytowany 1x, ostatnio: Puchaczov, 2011-09-27 00:07

Pozostało 580 znaków

2011-09-27 01:04

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()? ;)


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 2x, ostatnio: MasterBLB, 2011-09-27 02:55
okazuje się, że kluczowe tutaj było to rowCount() i columnCount(). Wystarczyło dodać jeden warunek i wsio działa. Dzięki - Puchaczov 2011-09-27 12:14

Pozostało 580 znaków

2011-09-27 09:34
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).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2011-09-27 09:37

Pozostało 580 znaków

2011-09-27 12:11
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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