QT实现用户登录注册
作者:阿宁(xin)。 发布时间:2022-07-10 08:21:57
标签:QT,登录,注册
本文实例为大家分享了QT实现用户登录注册的具体代码,供大家参考,具体内容如下
#include "widget.h"
#include "ui_widget.h"
//窗口设置
#include <QStyle>
//数据库连接
#include <QtSql/QSqlQuery>//数据库操作函数
#include <QtSql/QSqlError>//输出错误信息
#include <QMessageBox>//
#include <QSettings>//读写配置文件
#include <QtDebug>
Widget::Widget(QWidget *parent)
? ? : QWidget(parent)
? ? , ui(new Ui::Widget)
{
? ? ui->setupUi(this);
//窗口设置
? ? //设置窗口不显示标题,无边框
? ? ?setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
//设置最小化、关闭按钮
? ? ?//获取最小化、关闭按钮图标
? ? ? QPixmap minPix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);
? ? ? QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
? ? ? ui->mintoolButton->setIcon(minPix);
? ? ? ui->closetoolButton->setIcon(closePix);
? ? ? ui->mintoolButton->setStyleSheet("bakground-color:tranparent:");
? ? ? ui->closetoolButton->setStyleSheet("bakground-color:tranparent:");
? ? ? connect(ui->mintoolButton,&QPushButton::clicked,this,&Widget::showMinimized);
? ? ? connect(ui->closetoolButton,&QPushButton::clicked,this,&Widget::close);
//数据库连接
? ? ? //连接数据库
? ? ? ? ?//查看当前支持的数据库的驱动
? ? ? ? ? qDebug()<<QSqlDatabase::drivers();
? ? ? ? ? QSqlDatabase DB;//创建一个数据库的文件
? ? ? ? ?//加载数据库的文件
? ? ? ? ? QString aFile="./dataBase.db";
? ? ? ? ? if(aFile.isEmpty())
? ? ? ? ? {
? ? ? ? ? ? ? qDebug()<<" 数据库文件加载失败 " ;
? ? ? ? ? ? ? return ;
? ? ? ? ? }
? ? ? ? ? //打开数据库
? ? ? ? ? DB=QSqlDatabase::addDatabase("QSQLITE");//创建QSQLITE数据库连接
? ? ? ? ? DB.setDatabaseName(aFile); //数据库名
? ? ? ? ? if(!DB.open())
? ? ? ? ? {
? ? ? ? ? ? ? //没有数据库文件则创建文件
? ? ? ? ? ? ? qDebug()<<"数据库文件打开失败";
? ? ? ? ? ? ? qDebug()<<DB.lastError().text();//输出错误信息
? ? ? ? ? ?}
? ? ? ? ? qDebug()<< " 打开数据库文件成功 " ;
? ? ? //从配置文件中读取用户名和密码:
? ? ? ? ? QSettings setting("config.ini",QSettings::IniFormat);
? ? ? ? ? QString account = setting.value("section/account").toString();
? ? ? ? ? QString password = setting.value("section/password").toString();
? ? ? ? ? ui->accountEdit->setText(account);
? ? ? ? ? ui->passwordEdit->setText(password);
? ? ? ? ?//用户注册,向数据库插入数据
? ? ? ? ? connect(ui->registerButton,&QPushButton::clicked,this,[=](){
? ? ? ? ? //接受用户输入:
? ? ? ? ? ? ? QString account = ui->accountEdit->text();//用户账号
? ? ? ? ? ? ? QString password = ui->passwordEdit->text();//密码
? ? ? ? ? //创建自己需要使用的表格
? ? ? ? ? ? ? QSqlQuery query(DB);
? ? ? ? ? ? ? if(!query.exec("create table user(account varchar(255) primary key, password varchar(255))"))
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? qDebug() << "Error: Fail to create table."<< query.lastError();
? ? ? ? ? ? ? }
? ? ? ? ? ? ? else
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? qDebug() << "Table created!";
? ? ? ? ? ? ? }
? ? ? ? ? //插入数据
? ? ? ? ? ? ? QString qs = QString("insert into user(account,password) values('%1','%2')")
? ? ? ? ? ? ? ? ? ? ? .arg(account).arg(password);
? ? ? ? ? ? ? if(query.exec(qs)) //如果插入成功
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? QMessageBox::information(this,"注册","注册成功");
? ? ? ? ? ? ? }
? ? ? ? ? ? ? else
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? QMessageBox::information(this,"注册","注册失败");
? ? ? ? ? ? ? ? ? qDebug()<<query.lastError().text();//输出错误信息
? ? ? ? ? ? ? ? ? //return;
? ? ? ? ? ? ? }
? ? ? ? ? //查看数据
? ? ? ? ? ? ? //查看数据库中有的表格的名字
? ? ? ? ? ? ? qDebug()<<"查看数据库中所有的表:";
? ? ? ? ? ? ? QStringList str_table=DB.tables();
? ? ? ? ? ? ? qDebug()<<str_table;
? ? ? ? ? ? ? //查询数据库中的数据
? ? ? ? ? ? ? qDebug()<<"查看数据库中数据";
? ? ? ? ? ? ? query.prepare ("SELECT * FROM user");
? ? ? ? ? ? ? query.exec();
? ? ? ? ? ? ? while(query.next())
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? qDebug()<<QString("account:%1,password:%2").
? ? ? ? ? ? ? ? ? ? ? ? ? ? arg(query.value("account").toString()).arg(query.value("password").toString());
? ? ? ? ? ? ? }
? ? ? ? ? });
? ? ? //用户登录:查询数据
? ? ? ? ? connect(ui->loginButton,&QPushButton::clicked,this,[=](){
? ? ? ? ? ? ? //接受用户输入:
? ? ? ? ? ? ? ?QString account = ui->accountEdit->text();//用户账号
? ? ? ? ? ? ? ?QString password = ui->passwordEdit->text();//密码
? ? ? ? ? ? ? //查询数据
? ? ? ? ? ? ? ?QSqlQuery query;//操作数据库
? ? ? ? ? ? ? ?QString qs = QString("select * from user where account ='%1' and password='%2'").
? ? ? ? ? ? ? ? ? ? ? ?arg(account).arg(password);
? ? ? ? ? ? ? ?if(!query.exec(qs))//如果没有查到记录
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?qDebug() << query.lastError().text();//输出错误信息
? ? ? ? ? ? ? ? ? ?return;
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?//获取查询的数据
? ? ? ? ? ? ? ?if(query.next())//获取到数据
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?QMessageBox::information(this,"登录","登录成功");
? ? ? ? ? ? ? ? ? ?connect(tw,&TestWidget::testSigna,this,&Widget::show);//显示主窗口
? ? ? ? ? ? ? ? ? ?//在配置文件中记录用户账号密码
? ? ? ? ? ? ? ? ? ?if(ui->checkBox->isChecked())//选中,也就是用户已经登录
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ?//创建配置文件
? ? ? ? ? ? ? ? ? ? ? ?QSettings setting("config.ini",QSettings::IniFormat);//配置文件在工程目录下
? ? ? ? ? ? ? ? ? ? ? ?//把用户账号密码写到配置文件中
? ? ? ? ? ? ? ? ? ? ? ?setting.beginGroup("section");//节开始
? ? ? ? ? ? ? ? ? ? ? ?setting.setValue("account",account);
? ? ? ? ? ? ? ? ? ? ? ?setting.setValue("password",password);
? ? ? ? ? ? ? ? ? ? ? ?setting.endGroup();//结束
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ?QMessageBox::information(this,"登录","登录失败");
? ? ? ? ? ? ? ?}
? ? ? ? ? });
}
Widget::~Widget()
{
? ? delete ui;
}
#按钮的ui实现
结果
来源:https://blog.csdn.net/qq_44423388/article/details/124202373


猜你喜欢
- Radiobutton是一种单选按钮,是由于RadioGroup管理下的一组按钮,所以一旦其中的一个button选中,再点击,就不能取消,想
- android读取assets文件下的内容,一般都是使用getAsset.open()方法,并将文件的路径作为参数传入,而当我们解析一个目录
- 开发中,对于不经常使用英语的同学来说,对类,变量,方法想取一个合适的名字,此时发现自己的词汇早已还给老师 ,怎么办,这个插件能帮到你~一、安
- 效果图开发、使用环境说明安装TSC_7.3.8_M-3.exe打印机驱动,安装时选择对应的ttp 244 pro将TSCLIB.dll复制到
- 1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;2、Retent
- 作为开发人员,掌握开发环境下的调试技巧十分有必要。我们在编写java程序的过程中,经常会遇到各种莫名其妙的问题,为了检测程序是哪里出现问题,
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例为大家分享了C#十五子游戏的具体代码,供大家参考,具体内容如下using System;using System.Collectio
- 相信对于手机的时间日期设置大家一定都不陌生吧,今天举一个关于时间日期设置的示例,其中有些许不完善之处,例如如何使设置的时间日期和手机系统同步
- onclick事件的定义方法,分为三种,分别为在xml中进行指定方法;在Actitivy中new出一个OnClickListenner();
- APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代
- 使用poi生成excel通常包含一下几个步骤创建一个工作簿创建一个sheet创建一个Row对象创建一个cell对象(1个row+1个cell
- 前言:在没有接触java8的时候,我们遍历一个集合都是用循环的方式,从第一条数据遍历到最后一条数据,现在思考一个问题,为什么要使用循环,因为
- volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、boo
- 前言前面文章讲了消息是如何保存的以及consumeQueue与Index文件更新机制。随着消息的增加,Broker不可能一直保存所有消息,B
- 1.前置准备默认服务器上的hadoop服务已经启动本地如果是windows环境,需要本地配置下hadoop的环境变量本地配置hadoop的环
- 本文实例为大家分享了C++实现简单酒店管理系统的具体代码,供大家参考,具体内容如下酒店管理系统设计报告一、 需求分析题目要求如下:某酒店有客
- 一、内存池基础知识1、什么是内存池1.1 池化技术池化技术是计算机中的一种设计模式,主要是指:将程序中经常要使用的计算机资源预先申请出来,由
- 为什么需要组件化小项目是不需要组件化的。当一个项目有数十个人开发,编译项目要花费10分钟,修改一个bug就可能会影响到其他业务,小小的改动就
- 项目数据库中出现许多值为中括号[]的数据,测试报了bug,经过排查是因为使用了json-lib 的jar包导致。json-lib在将xml字