QT实现登陆注册界面并于Mysql相连接

Login.h

#ifndef LOGIN_H
#define LOGIN_H

#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>

class Loginwindow : public QDialog
{
    Q_OBJECT

public:
    Loginwindow(QWidget *parent = 0);
    ~Loginwindow();
private:
    //声明布局
   QGridLayout *MessageLayout;
   QGridLayout *ButtonLayout;
   QGridLayout *MainLayout;
    //声明信息成员
   QLabel *UserName;
   QLabel *Password;
   QLineEdit *UserNameEdit;
   QLineEdit *PasswordEdit;
   QPushButton *LoginButton;
   QPushButton *RegisterButton;
    //声明槽
public slots:
   void Login_slots();
   void Register_slots();
};

#endif // DIALOG_

Register.h

#ifndef REGISTER_H
#define REGISTER_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>

class registerwindow:public QDialog
{
    Q_OBJECT

public:
    registerwindow(QWidget *parent = 0);
    ~registerwindow();
private:
    //声明布局
    QGridLayout *MessageLayout;
    QGridLayout *ButtonLayout;
    QGridLayout *MainLayout;
    //声明信息成员
    QLabel *UserName;
    QLabel *Password;
    QLabel *RePassword;
    QLineEdit *UserNameEdit;
    QLineEdit *PasswordEdit;
    QLineEdit *RePasswordEdit;
    QLabel *Email;
    QLineEdit *EmailEdit;
    QPushButton *confirm;
    QPushButton *resetting;
    //声明槽
public slots:
    void confirm_slots();

};
#endif // REGISTER_H

Login.cpp

#include "Login.h"
#include <QPushButton>
#include <QString>
#include <QMessageBox>
#include "Register.h"
#include <Qtsql>
Loginwindow::Loginwindow(QWidget *parent)
    : QDialog(parent)
{
    //登陆界面定义
    setWindowTitle(tr("登陆界面"));
    //窗口只能最小化
    this->setWindowFlags (this->windowFlags () | Qt::WindowMinimizeButtonHint|Qt::MSWindowsFixedSizeDialogHint);
    //成员初始化
    UserName = new QLabel(tr("用户名:"));
    Password = new QLabel(tr("密码:"));
    UserNameEdit = new QLineEdit();
    PasswordEdit = new QLineEdit();
    LoginButton = new QPushButton(tr("登陆"));
    RegisterButton = new QPushButton(tr("注册"));
    //实现上方信息网格布局
    MessageLayout = new QGridLayout();
    MessageLayout->addWidget(UserName,0,0);
    MessageLayout->addWidget(UserNameEdit,0,1);
    MessageLayout->addWidget(Password,1,0);
    MessageLayout->addWidget(PasswordEdit,1,1);
    //实现下方按钮网格布局
    ButtonLayout = new QGridLayout();
    ButtonLayout->addWidget(LoginButton,0,0);
    ButtonLayout->addWidget(RegisterButton,0,1);
    ButtonLayout->setSpacing(15);
    //实现主网格
    MainLayout = new QGridLayout(this);
    MainLayout->addLayout(MessageLayout,0,0);
    MainLayout->addLayout(ButtonLayout,1,0);
    MainLayout->setMargin(15);
    MainLayout->setSpacing(10);
    //连接信号和槽
    connect(LoginButton,SIGNAL(clicked()),this,SLOT(Login_slots()));
    connect(RegisterButton,SIGNAL(clicked()),this,SLOT(Register_slots()));

}
//槽函数实现
void Loginwindow::Login_slots()
{
        QString  UName = UserNameEdit->text();
        QString  Pword = PasswordEdit->text();
        QString s=QString("select * from test_qt_01.user where username='%1'and password='%2' ").arg(UName).arg(Pword);//数据库存储用户名用username密码用password
        /*if(UName == "admin"&&Pword == "admin")
            QMessageBox::information(NULL, "登陆成功", "登陆成功!!!", QMessageBox::Yes);*/
        //查询数据库如果账号和密码匹配返回真否则返回假
        QSqlQuery query;
        query.exec(s);
        if(query.first())
            QMessageBox::information(NULL, "登陆成功", "登陆成功!!!", QMessageBox::Yes);
        else
            QMessageBox::warning(NULL,"Error","登录失败,请重试!!!");

}
void Loginwindow::Register_slots()
{
    this->hide();
    registerwindow re;
    re.show();
    re.exec();
    this->show();
}
Loginwindow::~Loginwindow()
{

}

Register.h

#include "Register.h"
#include <QPushButton>
#include <QString>
#include <QMessageBox>
#include <Qtsql>

registerwindow::registerwindow(QWidget *parent)
    :QDialog(parent)
{
    //登陆界面定义
    setWindowTitle(tr("注册界面"));
    //窗口只能最小化
    this->setWindowFlags (this->windowFlags () | Qt::WindowMinimizeButtonHint|Qt::MSWindowsFixedSizeDialogHint);
    //成员初始化
    UserName = new QLabel(tr("用户名:"));
    Password = new QLabel(tr("密码:"));
    RePassword = new QLabel(tr("重复密码:"));
    UserNameEdit = new QLineEdit();
    PasswordEdit = new QLineEdit();
    RePasswordEdit = new QLineEdit();
    Email = new QLabel("邮件:");
    EmailEdit = new QLineEdit();
    confirm = new QPushButton(tr("确认"));
    resetting = new QPushButton(tr("重置"));
    //实现上方信息网格布局
    MessageLayout = new QGridLayout();
    MessageLayout->addWidget(UserName,0,0);
    MessageLayout->addWidget(UserNameEdit,0,1);
    MessageLayout->addWidget(Password,1,0);
    MessageLayout->addWidget(PasswordEdit,1,1);
    MessageLayout->addWidget(RePassword,2,0);
    MessageLayout->addWidget(RePasswordEdit,2,1);
    MessageLayout->addWidget(Email,3,0);
    MessageLayout->addWidget(EmailEdit,3,1);
     //实现下方按钮网格布局
    ButtonLayout = new QGridLayout();
    ButtonLayout->addWidget(confirm,0,0);
    ButtonLayout->addWidget(resetting,0,1);
    ButtonLayout->setSpacing(15);
    //实现主网格
    MainLayout = new QGridLayout(this);
    MainLayout->addLayout(MessageLayout,0,0);
    MainLayout->addLayout(ButtonLayout,1,0);
    MainLayout->setMargin(15);
    MainLayout->setSpacing(10);
    //连接信号和槽
    connect(confirm,SIGNAL(clicked()),this,SLOT(confirm_slots()));
    connect(resetting,SIGNAL(clicked()),UserNameEdit,SLOT(clear()));
    connect(resetting,SIGNAL(clicked()),PasswordEdit,SLOT(clear()));
    connect(resetting,SIGNAL(clicked()),RePasswordEdit,SLOT(clear()));
}
//槽函数实现
void registerwindow::confirm_slots()
{
    QString UName = UserNameEdit->text();
    QString email = EmailEdit->text();
    QString Pword;
    if(PasswordEdit->text()==RePasswordEdit->text())
    {
        Pword = PasswordEdit->text();
        QString i=QString("insert into test_qt_01.user values ('%1','%2','%3'); ").arg(UName).arg(email).arg(Pword);
        QString S =QString("select * from test_qt_01.user where username='%1' ").arg(UName);
        QSqlQuery query;
        if(query.exec(i))
            QMessageBox::information(NULL, "注册成功", "注册成功!!!", QMessageBox::Yes);
        else if(query.exec(S)&&query.first())
            QMessageBox::warning(NULL,"Error","用户名重复,请重试!!!");
        else
            QMessageBox::warning(NULL,"Error","注册失败,请重试!!!");
        this->close();
    }
    else
        QMessageBox::warning(NULL,"Error","密码不重复,请重试!!!");
}

registerwindow::~registerwindow()
{

}

main.h

#include "Login.h"
#include <QApplication>
#include <QtSql>
#include <QMessageBox>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Loginwindow w;
    //连接数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test_qt_01");
    db.setUserName("root");
    db.setPort(3306);
    db.setPassword("root1");
    //如果数据库连接成功打开窗口否则退出程序
    if(db.open())
    {
        w.show();
    }
    else
    {
        QMessageBox::warning(NULL,"error","数据库连接失败");
        return 0;
    }
    return a.exec();
}

xxx.pro中加入qt += sql

QT版本5.9.3,Mysql版本8.0.11;

需要注意的是qt连接mysql的时候,要将
libmysql.dll和libmysql.lib拷贝至X:\Qt\Qt5.9.3\Tools\mingw530_32\bin 目录下,而且重要的是这两个需要的是32位的,用64位与编译器不符合会报错。

  • 15
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Qt是一个跨平台的C++应用程序开发框架,可以用来实现各种图形界面应用程序。要实现登录界面并使用MySQL保存数据和邮箱辅助注册,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了Qt开发环境和MySQL数据库,并且将MySQL数据库服务启动起来。 2. 在Qt Creator中创建一个新的Qt Widgets应用程序项目。 3. 在主窗口设计界面中,添加用户名和密码的输入框,并添加登录和注册的按钮。 4. 在项目中添加MySQL数据库的相关依赖库,并在代码中引入相关头文件。 5. 在登录按钮的点击事件中,先获取用户名和密码的输入,并连接MySQL数据库。可以使用QSqlDatabase类和QSqlQuery类来进行数据库的连接和操作。 6. 先检查输入的用户名和密码是否与数据库中的数据匹配,如果匹配则登录成功,否则显示错误信息。 7. 在注册按钮的点击事件中,获取用户名、密码和邮箱的输入,并检查是否已经存在相同的用户名。如果不存在相同用户名,则将数据插入到数据库中。 8. 在注册时,可以使用Qt提供的QRegularExpression类来验证邮箱的格式是否正确。 9. 注册成功后,可以发送一封确认邮件到用户输入的邮箱,以完成邮箱辅助注册的流程。 10. 最后,可以添加一些额外的功能,例如密码找回、自动登录等。 通过上述步骤,您可以实现一个简单的登录界面,使用MySQL保存数据,并使用邮箱辅助注册的功能。当然,根据具体需求,您还可以进一步完善界面设计和功能实现,来提高用户体验和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值