我想制作一个动态注册表单,其中最多 10 个用户可以登录我的表单,当我单击注册时,它将创建一个新用户,然后每个新用户都可以将他们的信息保存在文本浏览器中。另外,我想制作一个保存按钮,可以显示所有新用户的个人资料,当我点击任何一个个人资料时,它会给我关于该特定个人资料(用户)的详细信息。我的版本是qt5.12.0
我制作了一个最多 3 个用户可以登录的静态注册表单。那么如何将我的静态代码转换为最多 10 个用户可以登录的动态代码?
当我们点击注册按钮时,这是我的 mainwindow.cpp,它将读取 signup_data.txt 文件并验证我从 UI 输入的用户名和密码以及文本文件中的用户名密码。
void MainWindow::on_pushButton_clicked()
{
QFile inputFile("signup_data.txt");
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while (!in.atEnd())
{
QString line = in.readLine();
QString line2 = in.readLine();
QString line3 = in.readLine();
QString line4 = in.readLine();
QString line5 = in.readLine();
QString line6 = in.readLine();
qDebug() << line << "from text file";
qDebug() << line2 << "from text file";
QString username = ui->lineEdit->text();
QString password = ui->lineEdit_2->text();
qDebug() << username << "from UI";
qDebug() << password << "from UI";
if((username == "Harnish" && password == "Harnish") || (username == line && password == line2))
{
qDebug() << "enter in login";
secDialog = new SecDialog(this);
secDialog->show();
ui->statusBar->showMessage("Login Correct",5000);
}
else if ((username == line3 && password == line4) || (username == line5 && password == line6)) {
qDebug() << "enter in login3";
secDialog = new SecDialog(this);
secDialog->show();
ui->statusBar->showMessage("Login Correct",5000);
}
else {
// popupDialog = new PopupDialog(this);
// popupDialog->show();
// ui->statusBar->showMessage("Login Incorrect",5000);
}
}
inputFile.close();
}
}
我希望这个脚本的输出是一个动态注册表单,多个用户可以在其中登录。我想这里我们必须在 while 循环中加入 for 循环,但不知道如何实现。提前致谢。
最佳答案
首先,我认为您应该准确理解读取文件的工作原理。
你可以想象 QTextStream
作为已添加文件中所有行的存储桶。然后,当您调用 readLine()
您只需从桶中删除一行。由于从空桶中删除项目没有意义,因此您只能在桶中有项目时执行此操作(并使用 atEnd()
进行检查)。
我的观点是,只需一次 readLine()
调用就足以读取整个文件。下面的示例将读取整个文件。
QFile inputFile("signup_data.txt");
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream inStream(&inputFile);
while (!inStream.atEnd())
{
QString readLine = inStream.readLine();
}
}
为了支持无限制登录,您必须做的唯一改变就是简单地两两读取行,直到到达文件末尾。
void MainWindow::on_pushButton_clicked()
{
QString username = ui->lineEdit->text();
QString password = ui->lineEdit_2->text();
qDebug() << username << ":" << password << "from UI";
QFile inputFile("signup_data.txt");
if (inputFile.open(QIODevice::ReadOnly))
{
QTextStream in(&inputFile);
while (!in.atEnd())
{
QString readUsername = in.readLine();
QString readPassword = in.readLine();
qDebug() << readUsername << ":" << readPassword << "from text file";
if (username == readUsername && password == readPassword)
{
logIn();
break; // stop iterating, since the log-in was successful
}
else { ... }
}
inputFile.close();
}
}
void logIn()
{
qDebug() << "enter in login";
secDialog = new SecDialog(this);
secDialog->show();
ui->statusBar->showMessage("Login Correct",5000);
}
关于c++ - 如何在不使用任何数据库的情况下制作动态注册表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805413/