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
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
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;
}
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
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
@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ę.