Brak propagacji statusu w GUI

0

Dzień dobry,

w klasie cWorker stworzono wskaźnik na obiekt klasy cSingIn. Kiedy użytkownik wejdzie w "Zaloguj się" i poprawnie wypełni dane logowania wraca na stronę główną aplikacji, gdzie może wypożyczyć książkę. Tutaj jest problem, ponieważ instrukcja warunkowa if(_cSignIn->get_signed()) sprawdzająca czy użytkownik jest zalogowany nie przepuszcza dalej działania programu, mimo, iż w poprzednim okienku użytkownik zalogował się i zmienił wartość zmiennej _signed na true. Wskaźnik na obiekt klasy cSignIn ma cały czas wartości zadeklarowane przed konstruktor domyślny. Stąd pytanie, w jaki sposób powinienem przesłać do klasy cWorker dane klasy cSignIn, aby w razie zalogowania można obsłużyć użytkownika?

Pozdrawiam

cSignIn::cSignIn(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::cSignIn)
{
    ui->setupUi(this);
    _db.setHostName("localhost");
    _db.setDatabaseName("biblioteka");
    _db.setUserName("root");
    _db.setPassword("");
    connect(this->ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(onOk()));
    connect(this->ui->pushButton_cancel,SIGNAL(clicked(bool)),this,SLOT(onCancel()));
    _signed = 0;
    idStudent = 0;
}

void cSignIn::onOk() //po kliknieciu buttona "OK"
{
    if (!_db.open())
    {
        QMessageBox msgBox;
        msgBox.setText("Błąd: nie można się połączyć z bazą!");
        msgBox.exec();
    }
    else
    {
        QSqlQuery query;
        query.exec("SELECT * FROM uzytkownicy");

        while (query.next())
        {
            if(ui->lineEdit_UserName->text() == query.value(1).toString() && ui->lineEdit_Password->text() == query.value(2).toString())
            {
                _signed = 1;
                idStudent = query.value(0).toInt();
                qDebug()<<"idStudent: "<<idStudent;
            }
        }
        _db.close();
        if (_signed == 0)
        {
            QMessageBox msgBox;
            msgBox.setText("Zły login lub hasło");
            msgBox.exec();
        }
        else
        {
            close();
        }

    }
}

cWorker::cWorker(): _cSignIn (new cSignIn)
{
    db.setHostName("localhost");
    db.setDatabaseName("biblioteka");
    db.setUserName("root");
    db.setPassword("");
}

void cWorker::rent(QString id) //wypozycz
{
    if(_cSignIn->get_signed())
    {
        if (!db.open())
        {
            QMessageBox msgBox;
            msgBox.setText("Błąd: nie można się połączyć z bazą!");
            msgBox.exec();
        }
        else
        {

            QSqlQuery query;
            query.exec("UPDATE ksiazki SET StatusWypozyczenia = 1 WHERE id =" +id+""); //QString::number(_id)
            // pobieranie.prepare("DELETE FROM ksiazki WHERE id = "+QString::number(_id)+"");
            //  pobieranie.bindValue("id", 1);
            //  pobieranie.exec(); SLUZY DO USUWANIA KSIAZKI Z BAZY DANYCH
            QSqlQuery query2;
            qDebug()<<_cSignIn->idStudent;
            query2.exec("INSERT INTO Wypozyczenia (idUcznia, idKsiazki) VALUES ("+QString::number(_cSignIn->idStudent)+","+id+" )");
            qDebug()<<_cSignIn->idStudent;
            db.close();
        }
    }
    else
    {
        QMessageBox msgBox;
        msgBox.setText("Zaloguj się!");
        msgBox.exec();
    }
}
0

Moze pomoge :) http://cpp.sh/7hkr5

0

Jak nie wiesz gdzie jest błąd to zamieść cały kod, a nie wybrane w sposób losowy fragmenty.

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