c++ - 如何在不使用任何数据库的情况下制作动态注册表单?

标签 c++ qt

我想制作一个动态注册表单,其中最多 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/

相关文章:

android - 如何从 Necessitas Android 应用程序中删除所有默认权限?

c++ - 未定义的“函数引用”

c++ - 一个定义规则 - 编译

Qt 3D 无法构建图形管道

c++ - QT绘制平铺图像的方法

c++ - Qt-有没有办法优先调整子窗口小部件的大小

c++ - 以编程方式调用 Snap/Aero 最大化

c++ - C++中的虚拟与非虚拟多重继承

c++ - 多态对象列表

c++ - 如何提高C++中的多线程性能