QT学习:实现简单的登录登出界面功能

在设计实现一个系统的时候,用户登录界面的设计可以说是必不可少的环节,而用户登录界面的实现说到底就是不同窗口之间的切换。

在继续下面的工作之前,你首先要添加一个新的Qt设计师界面类,记住要选择Dialog without Buttons否则方法一无法实现

注:下面的代码只是核心部分,不是完整的代码,需要各位看官自己增删改以达到想要的效果,代码供参考。

方法一:利用QDialog的exec()

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyMainWindow welcomeWindow;//创建主窗口
    LoginDialog login;//创建登录对话框
    login.show();

    //如果登录对话框产生一个accept事件,则显示主窗口
    if(login.exec()==QDialog::Accepted){
        welcomeWindow.show();
    }
    return a.exec();
}

logindialog.cpp

void LoginDialog::on_buttonLogin_clicked()
{
    QString account = ui->lineAccount->text();//获取用户名文本框的内容
    QString inputPassword = ui->lineCode->text();//获取密码文本框的内容

    //这里是在数据库的账户信息表进行密码查找
    query.exec(QString("select Code from User_Info where Account='%1'").arg(account));
    QString password;
    while(query.next())
    {
        password = query.value("Code").toString();
    }
    
    //密码为空,说明没有该用户
    if(password.isEmpty()){
        QMessageBox::warning(this,"登录失败","用户名不存在,请检查");
        ui->lineAccount->clear();
        ui->lineCode->clear();
        ui->lineAccount->setFocus();
    }

    //用户存在,但是密码不正确
    else if(QString::compare(inputPassword,password,Qt::CaseSensitive))
    {
        QMessageBox::warning(this,"登录失败","密码错误,请检查");
        ui->lineAccount->clear();
        ui->lineCode->clear();
        ui->lineAccount->setFocus();
    }

    //用户密码均输入正确
    else{
        QMessageBox::information(this,"登录成功","成功登录!");
        accept();//激发accept事件
    }
}

方法二:利用信号与槽

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyMainWindow welcomeWindow;
    LoginDialog login;
    login.show();

    //使用QT4的方式进行信号与槽函数的connect
    //参数一:信号发出者
    //参数二:发出的信号
    //参数三:信号接收者
    //参数四:响应的槽函数

    //点击登录对话框的登录按钮,进入主界面
    QObject::connect(&login,SIGNAL(mainshow()),&welcomeWindow,SLOT(show_mainwindow()));
    //点击主界面的注销,返回登录对话框
    QObject::connect(&welcomeWindow,SIGNAL(loginshow()),&login,SLOT(show_loginwindow()));

    return a.exec();
}

接下来就需要分别声明定义相应的信号和槽函数了。

logindialog.h:声明信号 mainshow() 和槽函数 show_loginwindow()

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();

//信号声明的固定格式
signals:
    void mainshow();

//槽函数的声明
private slots:
    void on_buttonLogin_clicked();

    void show_loginwindow();

private:
    Ui::LoginDialog *ui;
};

logindialog.cpp:定义槽函数 show_loginwindow()

void LoginDialog::show_loginwindow()
{
    this->show();//显示登录对话框
    ui->lineAccount->clear();//清空文本框
    ui->lineCode->clear();
    ui->lineAccount->setFocus();//设置光标
}

登录按钮点击事件稍作修改

else{
    QMessageBox::information(this,"登录成功","成功登录!");
    this->close();//关闭登录对话框
    emit mainshow();//发送mainshow信号
}

mymainwindow.h:声明信号 loginshow() 和槽函数 show_mainwindow()

class MyMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MyMainWindow(QWidget *parent = 0);
    ~MyMainWindow();

signals:
    void loginshow();

private slots:
    void show_mainwindow();

private:
    Ui::MyMainWindow *ui;
};

mymainwindow.cpp:实现槽函数 show_mainwindow()

void MyMainWindow::show_mainwindow()
{
    this->show();//显示主窗口
}

 

运行效果图

效果图
运行效果
​登录界面

总结

两种方法个人更倾向于第二种。第二种方法更加灵活,可以同时实现登入登出的功能。

 


版权声明:本文为weixin_45138590原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。