软件层系统功能模块——登录系统

之前完成的对话框的GUI设计工作只是得到了一个空架子,单击按钮不会产生任何影响,输入的用户名和密码也不会被提取,下面将实现这些功能即完成"登录系统"的相关功能。

首先双击books项目下的dialog.ui文件进入登陆界面编辑框,右击"登陆"按钮,在弹出的快捷菜单中选择"转到槽",然后选择clicked,表示响应单击事件,确定后在dialog.cpp中将生成on_pushButton_clicked(),登录功能代码如下:

void Dialog::on_pushButton_clicked()
{
      // 1.获取用户名和密码
      if(ui->lineEdit->text().isEmpty() || ui->lineEdit_2->text().isEmpty){
              QMessageBox::information(this, tr("登录"), tr("用户名和密码不能为空"));
               return ;
       }
       ui->pushButton->setEnabled(false);      // 网络登录较慢,防止多次单击登录按钮
       // 2.使用Hessian登录
       // 3.其他内容
       isLogin = false;
       ui->pushButton->setEnabled(true);
}

ui->lineEdit->text()函数用于读取编辑栏中的内容,通常获取到用户名和密码时需要通过网络进行验证,这部分内容将在Hessian操作处进行介绍。如果用户名或密码为空,则不能登录。如果需要提供默认用户名,可以在Dialog::Dialog(QWidget *parent)构造函数中添加ui->lineEdit->setText("user1")函数,实现对lineEdit组件设置默认值。

QMessageBox::information是Qt中非常常用的提示对话框,该语句能为用户打印出带有OK按钮的对话框,为用户提示信息。要使用这个函数需要引入头文件#include

tr()函数用于实现国际化处理。被它处理的字符串可以被工具提取出来,翻译成其他语言,Qt默认支持多种语言,可根据语言环境的不同显示不同的语言信息。使用tr()函数时需要提供语言之间翻译转化的翻译包,否则该函数将不能工作。如果程序只面向某一种语言,那么也可不去考虑它。

ui->pushButton->setEnabled(false)函数使登录按钮变灰不能单击。这是由于网络登录过程较慢,不允许用户反复单击这个按钮,登录结束后将其设置为''true"使按钮恢复功能。

isLogin是全局变量bool值,标识用户登录情况。因为在整个系统中"用户是否登录"决定了整个系统的工作状态,考虑到效率方面的原因,使用全局变量来标识登录情况更符合本项目的要求。使用它时需要在dialog.h中加入定义。

同样对"升级"按钮添加槽响应单击事件,生成on_pushButton_2_clicked()函数。代码内容后续填充。

QMessageBox定义了4种对话框:information、question、warning和critical,分别表示信息提示对话框、提问对话框、警示对话框和重要错误对话框。使用这几种对话框是需要加入头文件。使用方式如下所示:

QMessageBox::information(this, tr("登录"), tr("用户名和密码不能为空"));

因为这4种对话框对应的函数都是静态函数,因此使用时不需要实例化QMessageBox对象。使用方式是QMessageBox::information,第一个参数是父对象,后面2个参数分别表示对话框标题和对话框内容,内容若要换行可直接加\n。上述示例代码执行后对话框只有一个OK按钮。若要设置不同类型的按钮,则需要对该函数的参数默认值进行修改,代码如下:

QMessageBox::information(this, "重要信息", "请保存当前工作。",
                         QMessageBox::Yes | QMessageBox::No);

"QMessageBox::Yes | QMessageBox::No"设置后显示的对话框会出现2个按钮,单击任何按钮均可关闭对话框。一般情况下,系统对话框只起到提示信息的作用,但有时程序希望能得到用户单击不同按钮返回的信息,然后进行相应的处理,可采用如下代码:

if(QMessageBox::No == QMessageBox::information(this, "重要信息", "请保存当前工作。",
                      QMessageBox::Yes | QMessageBox::No)){
       // ...如果单击No按钮
}

若要获得Yes按钮的信息,则判断QMessageBox::Yes。

"转到槽"对话框中有丰富的响应事件函数,我们可以直接选择需要的响应事件函数,使Qt Creator为我们自动生成相应的函数框架,然后我们可以在该框架下编写函数的实现细节

你可能感兴趣的:(软件层系统功能模块——登录系统)