Qt - model/widok - dlaczego po wpisaniu ZERA nie można dodać danych ?

0

Zrobiłem mały model/widok. Wszystko działa jak trzeba z jednym wyjątkiem. Po wyświetleniu się tablicy i wpisaniu ZERA w dowolne pole, nie mogę już dodać danych. Czy ktoś z was powie mi gdzie leży błąd ?

cały kod znajduje się na GitLabi-e

0

Czemu columnCount jest 2?
Czemu w setData przy zmianie tablica używasz index.column()? Czemu ma służyć ten warunek:

        if(tablica.at(index.row()) && tablica.at(index.column())){

i jeszcze ten repace.

IMO powinno być tak:

int MyModel::rowCount(const QModelIndex &parent) const
{
    return parent.isValid() ? 0 : tablica.count();
}

int MyModel::columnCount(const QModelIndex &parent) const
{
    return parent.isValid() ? 0 : 1;
}

QVariant MyModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    if(role == Qt::DisplayRole || role == Qt::EditRole){
        return tablica[index.row()];
    }

    return QVariant();
}

bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    if(!index.isValid()){
        return false;
    }

    if(role == Qt::EditRole) {
        bool ok = false;
        int x = value.toInt(&ok);
        if (ok) {
            tablica[index.row()] = x;
            emit dataChanged(index, index, QVector<int>{ Qt::EditRole, Qt::DisplayRole });
            return true;
        }
    }
    return false;
}
0

@MarekR22:

Czemu columnCount jest 2?

no to jest tylko po to abym zrozumiał jak działa model/widok i tylko tyle, to nie ma żadnego szczególnego znaczenia - wiem, że go tam nie powinno być ale to jest dla lepszego zrozumienia tematu

Czemu w setData przy zmianie tablica używasz index.column()? Czemu ma służyć ten warunek:
if(tablica.at(index.row()) && tablica.at(index.column())){

tutaj chciałem "wykryć" kolumnę i wiersz który klikam aby dane mogły znaleźć się we właściwych miejscach

0

@MarekR22:

Nie rozumiem "użyć ponownie". Opisz w post (nie komentarzu) jakiej funkcjonalności oczekujesz. Ja zgaduje i domyślam sie czegos innego niż ty wymyśliłeś

nie chodzi o ponowne użycie ale o POPRAWNE UŻYCIE - wiem, że index zawiera pozycję wiersz i kolumna danych ale mój problem polega na tym, że nie wiem jak poprawnie używać tego index-u do wstawiania właściwych danych do jednowymiarowej tablicy, już nawet nie wspomnę o tablicy wielowymiarowej.

ale widzę, że twoje rozwiązanie jest spoko, tylko skąd ten sygnał ? W dokumentacji to jest ?

Opisz w post (nie komentarzu) jakiej funkcjonalności oczekujesz

nie oczekuję nic wielkiego, tylko chcę aby wyświetlić jednowymiarową tablice w widoku i w tym widoku zmienić wyświetlające się cyfry, a potem zmiany które wprowadzę w widoku zapisały się w tej tablicy i widok się odświeżył z nowymi danymi

0

@MarekR22:
Jeżeli się nie rozumiemy, to chciałem powiedzieć, że to co zrobiłem z modelem jest dla mnie wystarczające.

Natomiast chciałbym zapytać o jeszcze jedną rzecz - jak obejść kasowanie danych gdy kliknie się dwa razy w jakieś pole ? Bo po takiej czynności pojawia się zero, a ja nie chcę aby po dwukliku dane się kasowały gdy czegoś nie wprowadzę.

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