QT实现用户登录功能
来源:互联网 发布:怎么拍下淘宝里的货 编辑:程序博客网 时间:2024/05/22 06:25
功能:
1.提供登录界面(客户端)
2.服务器端用数据库来存储用户名和密码
3.注册时客户端将注册信息发送给服务器端,并进行验证,如果注册名可用,添加进数据库并返回客户端添加成功信息。
4.登录时客户端将登录信息发送给服务器端进行验证,服务端返回验证结果。
待添加:
1.服务器端并发功能实现
#include "tcpclient.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); TcpClient w; w.setWindowTitle("Client"); w.show(); return a.exec();}
#ifndef TCPCLIENT_H#define TCPCLIENT_H#include <QMainWindow>#include <QtNetwork>#include <QMessageBox>namespace Ui {class TcpClient;}class TcpClient : public QMainWindow{ Q_OBJECTpublic: explicit TcpClient(QWidget *parent = 0); ~TcpClient();protected: void init(); void connectServer();private slots: void on_sendBtn_clicked(); void displayError(QAbstractSocket::SocketError); void on_signBtn_clicked(); void readMessages();private: Ui::TcpClient *ui; QTcpSocket *tcpSocket;};#endif // TCPCLIENT_H
注意:如果客户端连接服务器后想接着给服务器发送信息
则下面这句话要接在连接服务器语句后,不能放在init函数里,不然无法给服务器发送数据。
connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessages()));
#include "tcpclient.h"#include "ui_tcpclient.h"#define ip "192.168.1.165"#define port 8000TcpClient::TcpClient(QWidget *parent) : QMainWindow(parent), ui(new Ui::TcpClient){ ui->setupUi(this); ui->passwardLineEdit->setEchoMode(QLineEdit::Password); //密码方式显示文本 init(); connectServer();}TcpClient::~TcpClient(){ delete ui;}void TcpClient::init(){ tcpSocket=new QTcpSocket(this); connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(displayError(QAbstractSocket::SocketError))); //发生错误时执行displayError函数}void TcpClient::connectServer(){ tcpSocket->abort(); //取消已有的连接 tcpSocket->connectToHost(ip,port); connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessages()));}void TcpClient::on_sendBtn_clicked(){ QString userName=ui->userLineEdit->text(); QString passward=ui->passwardLineEdit->text(); if(userName=="" || passward=="") QMessageBox::information(this,"警告","输入不能为空",QMessageBox::Ok); QString bs="b"; QString data=bs+"#"+userName+"#"+passward; tcpSocket->write(data.toLatin1());}void TcpClient::on_signBtn_clicked(){ QString userName=ui->userLineEdit->text(); QString passward=ui->passwardLineEdit->text(); if(userName=="" || passward=="") QMessageBox::information(this,"警告","输入不能为空",QMessageBox::Ok); QString as="a"; QString data=as+"#"+userName+"#"+passward; tcpSocket->write(data.toLatin1());}void TcpClient::displayError(QAbstractSocket::SocketError){ qDebug()<<tcpSocket->errorString(); //输出出错信息}void TcpClient::readMessages(){ QString data=tcpSocket->readAll(); QStringList list=data.split("#"); if(list[0]=="a" && list[1]=="true") QMessageBox::information(this,"信息提示","注册成功!",QMessageBox::Ok); else if(list[0]=="a" && list[1]=="false") QMessageBox::information(this,"信息提示","注册失败,用户名已经被注册!",QMessageBox::Ok); else if(list[0]=="b" && list[1]=="true") QMessageBox::information(this,"信息提示","登录成功!",QMessageBox::Ok); else if(list[0]=="b" && list[1]=="false") QMessageBox::information(this,"信息提示","登录失败,用户名或密码错误!",QMessageBox::Ok); else return;}
客户端界面如下:
#include "tcpserver.h"#include <QApplication>#include "mysql.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MySql ms; ms.initsql(); TcpServer w; w.setWindowTitle("Server"); w.show(); return a.exec();}
#ifndef MYSQL_H#define MYSQL_H#include <QSql>#include <QSqlDatabase>#include <QSqlQuery>#include <QDebug>class MySql{public: MySql(); void initsql(); void createtable(); bool loguser(QString name,QString passward); bool signup(QString name,QString passward);private: QSqlQuery *query;};#endif // MYSQL_H
注意:下面这句话并不能创建数据库,只能连接已有数据库,因此创建数据库必须在mysql里面用create database User来完成。
db.setDatabaseName("User");
#include "mysql.h"MySql::MySql(){}void MySql::initsql(){ QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("127.0.0.1"); db.setUserName("root"); db.setPassword(""); db.setDatabaseName("User"); if(db.open()) { qDebug()<<"Database connected successfully!"; createtable(); return; } else { qDebug()<<"Database connected failed!"; return; }}void MySql::createtable(){ query=new QSqlQuery; query->exec("create table user(name VARCHAR(30) PRIMARY KEY UNIQUE NOT NULL,passward VARCHAR(30))"); /*创建root用户*/ query->exec("insert into user value('root', 'root')");}bool MySql::loguser(QString name, QString passward){ QString str=QString("select * from user where name='%1' and passward='%2'").arg(name).arg(passward); query=new QSqlQuery; query->exec(str); query->last(); int record=query->at()+1; if(record==0) return false; return true;}bool MySql::signup(QString name,QString passward){ QString str=QString("select * from user where name='%1").arg(name); query=new QSqlQuery; query->exec(str); query->last(); int record=query->at()+1; if(record!=0) return false; str=QString("insert into user value('%1','%2')").arg(name).arg(passward); bool ret=query->exec(str); return ret;}
#ifndef TCPSERVER_H#define TCPSERVER_H#include <QMainWindow>#include <QtNetwork>#include <QTimer>namespace Ui {class TcpServer;}class TcpServer : public QMainWindow{ Q_OBJECTpublic: explicit TcpServer(QWidget *parent = 0); ~TcpServer(); bool checkSignIn(QString name,QString passward); bool checkSignUp(QString name,QString passward);protected: void init(); // 初始化函数用于完成一些诸如信号与槽之间的联系和变量初始化工作private slots: void on_startBtn_clicked(); void acceptConnection(); void receiveData(); void displayError(QAbstractSocket::SocketError);private: Ui::TcpServer *ui; QTcpSocket *tcpSocket; QTcpServer *tcpServer; QTimer *timer;};#endif // TCPSERVER_H
#include "tcpserver.h"#include "ui_tcpserver.h"#include "mysql.h"TcpServer::TcpServer(QWidget *parent) : QMainWindow(parent), ui(new Ui::TcpServer){ ui->setupUi(this); init();}TcpServer::~TcpServer(){ delete ui;}void TcpServer::init(){ this->tcpServer=new QTcpServer(this); this->tcpSocket=new QTcpSocket(this); connect(tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection())); connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)), this,SLOT(displayError(QAbstractSocket::SocketError)));}void TcpServer::receiveData(){ QString data=tcpSocket->readAll(); QStringList list=data.split("#"); bool ret=0; if(list[0]=="a") //注册 ret=checkSignUp(list[1],list[2]); else if(list[0]=="b") //登录 ret=checkSignIn(list[1],list[2]); else return; QString sendData=list[0]; if(ret) sendData+="#true"; else sendData+="#false"; tcpSocket->write(sendData.toLatin1());}void TcpServer::on_startBtn_clicked(){ ui->startBtn->setEnabled(false); if(!tcpServer->listen(QHostAddress::Any,8000)) { qDebug()<<tcpServer->errorString(); close(); return; }}void TcpServer::acceptConnection(){ tcpSocket=tcpServer->nextPendingConnection(); connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(receiveData())); //**********}void TcpServer::displayError(QAbstractSocket::SocketError){ qDebug()<<tcpSocket->errorString(); tcpSocket->close();}bool TcpServer::checkSignIn(QString name,QString passward){ MySql *mysql=new MySql(); bool ret=mysql->loguser(name,passward); return ret;}bool TcpServer::checkSignUp(QString name, QString passward){ MySql *mysql=new MySql(); bool ret=mysql->signup(name,passward); return ret;}
完整文件下载:https://github.com/onlyou2030/SignIn-SignUp
阅读全文
1 2
- QT实现用户登录功能
- Qt 实现登录功能
- PHP用户登录功能实现
- SQLite实现用户登录功能
- 用模式一实现用户登录功能
- Flex4.5实现用户登录功能
- 利用SSH框架实现用户登录功能
- jQuery-Ajax用户登录功能的实现
- php实现简单用户登录功能程序代码
- redis实现网站最新登录用户功能
- jsp连接数据库实现用户登录功能
- SpringMVC + Mybatis 实现用户登录功能
- 网络编程--实现用户登录验证功能
- Jsp&Servlet 用户登录功能实现
- JSP+JavaBean实现用户登录功能
- 用户登录记住密码功能的实现
- 用户注册与登录功能的实现
- jsp连接数据库实现用户登录功能
- java中常见的中文编码格式
- Centos7 更新软件及删除多余内核
- java文件分割代码实现
- codeforces 787A
- windows下面安装Python3.6和pip终极教程
- QT实现用户登录功能
- 圆形头像CircleImageView
- 关于Android Studio中安装和gradle的一些坑
- AtCoder Beginner Contest 061 D
- HTML基础学习
- codeforces D. Dynamic Problem Scoring
- Leetcode-Palindrome Number Add to List
- 【linux-WebServer】nginx学习(CDSN就是用这个服务器)
- Xcode 7 Bitcode的工作流程及安全性评估