我試圖進行登錄和注冊。我將憑證保存在文本檔案中,對于登錄,我使用 if 陳述句來比較用戶鍵入的內容和保存在檔案中的憑證。但是我的 if 不起作用,程式在“進入”時崩潰。目前我的 if 在讀取檔案的 while 回圈內。當我試圖在外面使用它時,QString username and QString password它說他們沒有宣告。這是代碼:
void MainWindow::on_pushButton_Login_clicked()
{
QString usernamelogin = ui->lineEdit_username->text();
QString passwordlogin = ui->lineEdit_password->text();
QFile file("C:/Users/luisp/Desktop/poo/janela_de_login/Credencials/UsersInfo.txt");
if(!file.open(QFile::ReadOnly | QFile::Text)){
// QMessageBox::Warning(this,"Aviso", "file not open");
}
QTextStream in(&file);
while(!in.atEnd())
{
QString line = in.readLine();
QStringList credencials = line.split("\n");
QString username = credencials[1];
QString password = credencials[2];
file.flush();
file.close();
if (username == usernamelogin && password == passwordlogin){
//QMessageBox::information(this, "Login", "Username and password correct");
ui->statusbar-> showMessage("Username e password correct", 3000);
}
else{
//QMessageBox:: warning(this, "Login","Username e password not correct");
ui->statusbar-> showMessage("Username e password not correct", 3000);
}
}
}
void MainWindow::on_pushButton_Register_clicked()
{
QFile file("C:/Users/luisp/Desktop/poo/janela_de_login/Credenciais/UsersInfo.txt");
if(!file.open(QFile::WriteOnly | QFile::Text)){
// QMessageBox::Warning(this,"warning", "file not open");
}
QTextStream out(&file);
QString email = ui->Email_Register->text();
out << email << '\n';
QString username = ui->Username_Register->text();
out << username << '\n';
QString password = ui->Password_Register->text();
out << password << '\n';
file.flush();
file.close();
}
uj5u.com熱心網友回復:
我看到了幾個問題,'\n' 通常表示一個新行,那么您的用戶名和密碼是否在檔案中的不同行上?如果不是,那么顯然你的問題是它們不在同一條線上。如果您出于某種奇怪的原因將 username\npassword\n 全部放在同一行中,那么您很可能正在運行 QString.split('\n') 回傳的陣列的末尾,因為它應該在憑據中回傳它們[0 ] 和憑據[1]。
uj5u.com熱心網友回復:
假設line.split("\n")call 回傳一個包含 3 個字串的串列,你就錯了。不可能。
您的呼叫in.readLine()讀取檔案直到結尾的行尾字符,并回傳字串而不包括后者。
您正在使用行尾字符來存盤用戶憑據,這意味著您只讀取用戶的一個屬性,并且 split 函式僅回傳讀取的文本行(QStringList var 的大小等于 1)
您可以改用該readAll()功能
void MainWindow::on_pushButton_Login_clicked()
{
QString usernamelogin = ui->lineEdit_username->text();
QString passwordlogin = ui->lineEdit_password->text();
QFile file("C:/Users/luisp/Desktop/poo/janela_de_login/Credencials/UsersInfo.txt");
if(!file.open(QFile::ReadOnly | QFile::Text))
return;
QTextStream in(&file);
QStringList userData = in.readAll().split("\n");
if(userData.size() !== 3)
return;
QString userName = userData.at(1);
QString userPass = userData.at(2);
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417717.html
標籤:
