QString - jak porównać czy oba stringi wynoszą NULL, EMPTY lub ZERO ?

0

Piszę sobie kawałek kodu i napotkałem drobny problem.

QString pName, pSurname;

if(this->pName.isEmpty()){
    qDebug()<< "wprowadz imie";
}
else if(this->pSurname.isEmpty()){
    qDebug()<< "wprowadz nazwisko";
}
else if(this->pName.isEmpty() && this->pSurname.isEmpty()){
    qDebug()<< "wprowadz imie i nazwisko";
}
else{
    qDebug()<< "wprowadzam dane";
}

pytanie jest takie - dlaczego ten kawałek kodu else if(this->pName.isEmpty() && this->pSurname.isEmpty()) nie chce się wykonać ?
przecież mogę mieć formularz pusty, mogę mieć również jedno z tych pól wypełnione, a mogę mieć również cały formularz wypełniony

Co zrobić aby warunek dla obu pustych pól był spełniony ?

3

Ponieważ nigdy się nie nauczyłeś podstaw logiki.
Zacznij od podstaw algebry boolowskiej!!!
Jak nie jesteś w stanie przeczytać pary stron to sobie rozrysowuj:

a b a&b
0 0 0
0 1 0
1 0 0
1 1 1

czyli jak a&b w else if po a to tak jak pytasz.

WRÓĆ DO PODSTAW!!!

0

dobra, rozwiązałem se problem.

if(this->pName.isEmpty() && !this->pSurname.isEmpty()){
    qDebug()<< "wprowadz imie";
}
else if(this->pSurname.isEmpty() && !this->pName.isEmpty()){
    qDebug()<< "wprowadz nazwisko";
}
else if(this->pName.isEmpty() && this->pSurname.isEmpty()){
    qDebug()<< "wprowadz imie i nazwisko";
}
else{
    qDebug()<< "wprowadzam dane";
    pName.clear();
    pSurname.clear();
}
4

Wróć do podstaw logiki boolowskiej!!!

if(pName.isEmpty()) qDebug()<< "wprowadz imie";
if(pSurname.isEmpty()) qDebug()<< "wprowadz nazwisko";

Nawet w przypadku jak z jakiegoś jedynie tobie znanego bezsensownego powodu chcesz mieć komunikat dla każdego przypadku to i tak da się to zapisać krócej:

static const char* msg[]={"wprowadzam dane","wprowadz imie","wprowadz nazwisko","wprowadz imie i nazwisko"};
int bitmap=((pName.isEmpty())<<1)||(pSurname.isEmpty());
qDebug()<<msg[bitmap];
if(!bitmap)
{
    pName.clear();
    pSurname.clear();
}

lub w przypadku większej ilości pól (aczkolwiek warto zrobić już sensowniejszego validator'a nazwa -> lambda):

static QString msg[]={"imie","nazwisko","pesel","płeć"};
QString prompt="";
if(pName.isEmpty()) prompt+=msg[0]+"\t";
if(pSurname.isEmpty()) prompt+=msg[1]+"\t";
if(pPesel.isEmpty()) prompt+=msg[2]+"\t";
if(pSex.isEmpty()) prompt+=msg[3]+"\t";
qDebug()<<prompt.trimmed().replace("\t"," i ");
if(!prompt.size()) qDebug()<<"wprowadzam dane";

Spróbuj rozszerzyć swój przykład w twoim stylu o dodatkowe dwa pola pPesel oraz pPlec, no i odpowiednio w moim stylu (jak wyżej) aczkolwiek wątpię aby dałeś sobie rady chociażby z jedną z tych prób.

0
zkubinski napisał(a):

dobra, rozwiązałem se problem.

if(this->pName.isEmpty() && !this->pSurname.isEmpty()){
    qDebug()<< "wprowadz imie";
}
else if(this->pSurname.isEmpty() && !this->pName.isEmpty()){
    qDebug()<< "wprowadz nazwisko";
}
else if(this->pName.isEmpty() && this->pSurname.isEmpty()){
    qDebug()<< "wprowadz imie i nazwisko";
}
else{
    qDebug()<< "wprowadzam dane";
    pName.clear();
    pSurname.clear();
}

Jak już chcesz iść tą drogą, to chociaż zrób

if (a && b) {
} else if (a) {
} else if (b) {
} else {

}

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