Qt(day5)

思维导图

将登录操作和数据库绑定 

mywnd.h

#ifndef MYWND_H
#define MYWND_H#include <QMainWindow>
#include<QLabel>
#include<QLineEdit>
#include<QPushButton>
#include<QDebug>
#include<QMessageBox>
#include"second.h"
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlRecord>QT_BEGIN_NAMESPACE
namespace Ui { class MyWnd; }
QT_END_NAMESPACEclass MyWnd : public QMainWindow
{Q_OBJECTsignals:void loginbtn_signal();public slots:void registerbtn_slot();void loginbtn_slot();void cancelbtn_slot();public:MyWnd(QWidget *parent = nullptr);~MyWnd();private:Ui::MyWnd *ui;QPushButton *registerbtn;QPushButton *loginbtn;QPushButton *cancelbtn;QLineEdit *usernameedit;QLineEdit *passwdedit;QLabel *logolab;QLabel *usernamelab;QLabel *passwdlab;Second *s1;QSqlDatabase db;
};
#endif // MYWND_H

mywnd.cpp

#include "mywnd.h"
#include "ui_mywnd.h"MyWnd::MyWnd(QWidget *parent): QMainWindow(parent), ui(new Ui::MyWnd)
{ui->setupUi(this);//将当前界面的信号,与s1界面的槽函数进行连接s1=new Second;connect(this,&MyWnd::loginbtn_signal,s1,&Second::jump_slot);//对页面进行修改this->setFixedSize(QSize(800,700)); //固定文件框的大小this->setWindowTitle("华清远见");   //设置文件的标题this->setWindowIcon(QIcon(":/icon/wodepeizhenshi.png")); //为标题加图片//设置logo图片logolab=new QLabel(this);  //构造一个lab,指定父组件logolab->resize(800,250);  //设置图片尺寸logolab->setPixmap(QPixmap(":/icon/logo.png"));  //设置logo图片logolab->setScaledContents(true);   //设置图片自适应//设置username图片usernamelab=new QLabel(this);  //构造一个lab,指定父组件usernamelab->resize(50,50);    //设置图片尺寸usernamelab->move(230,300);    //设置图片位置usernamelab->setPixmap(QPixmap(":/icon/username.jpg"));  //设置logo图片usernamelab->setScaledContents(true);   //设置图片自适应//设置passwd图片passwdlab=new QLabel(this);  //构造一个lab,指定父组件passwdlab->resize(50,50);    //设置图片尺寸passwdlab->move(230,380);    //设置图片位置passwdlab->setPixmap(QPixmap(":/icon/passwd.jpg"));  //设置logo图片passwdlab->setScaledContents(true);   //设置图片自适应//设置username输入文本框usernameedit=new QLineEdit(this);   //构造一个行编辑器,指定父组件usernameedit->resize(300,50);  //设置行编辑器大小usernameedit->move(300,300);   //设置行编辑器位置usernameedit->setEchoMode(QLineEdit::Normal);  //设置明文模式usernameedit->setPlaceholderText("username");  //设置占位符//设置passwd输入文本框passwdedit=new QLineEdit(this);   //构造一个行编辑器,指定父组件passwdedit->resize(300,50);  //设置行编辑器大小passwdedit->move(300,380);   //设置行编辑器位置passwdedit->setEchoMode(QLineEdit::Password);    //设置密文模式passwdedit->setPlaceholderText("passwd");    //设置占位符//设置注册按钮registerbtn=new QPushButton("注册",this);   //构造注册按键,指定父组件registerbtn->resize(380,60);   //设置按键大小//registerbtn->setIcon(QIcon(":/icon/login.png"));    //设置按键图标registerbtn->move(passwdlab->x(),passwdlab->y()+80); //设置按键位置//设置登录按钮loginbtn=new QPushButton("登录",this);   //构造登录按键,指定父组件loginbtn->resize(380,60);   //设置按键大小loginbtn->setIcon(QIcon(":/icon/login.png"));    //设置按键图标loginbtn->move(registerbtn->x(),registerbtn->y()+70); //设置按键位置//设置取消按钮cancelbtn=new QPushButton("取消",this);   //构造取消按键,指定父组件cancelbtn->resize(380,60);   //设置按键大小cancelbtn->setIcon(QIcon(":/icon/cancel.png"));   //设置按键图标cancelbtn->move(loginbtn->x(),loginbtn->y()+70); //设置按键位置//注册按键的信号与槽连接connect(registerbtn,&QPushButton::clicked,this,&MyWnd::registerbtn_slot);//登录按键的信号与槽连接connect(loginbtn,&QPushButton::clicked,this,&MyWnd::loginbtn_slot);//取消按键的信号与槽连接connect(cancelbtn,&QPushButton::clicked,this,&MyWnd::cancelbtn_slot);//先判断是否有数据库文件if(!db.contains("user.db")){//建一个数据库,给定使用的数据库类型db=QSqlDatabase::addDatabase("QSQLITE");//给刚刚创建的数据库设置名字db.setDatabaseName("user.db");}//打开数据库if(!db.open()){QMessageBox::information(this,"提示","数据库打开失败");return;}//实例化一个QSqlQuery的类对象QSqlQuery query;//准备sql语句QString sql="create table if not exists user(""username varchar(20) primary key,""passwd varchar(20))";//执行sql语言if(!query.exec(sql)){QMessageBox::information(this,"提示","数据表创建失败");return;}}MyWnd::~MyWnd()
{delete ui;
}void MyWnd::registerbtn_slot(){if(usernameedit->text()==""||passwdedit->text()==""){QMessageBox::information(this,"提示","用户名或密码不能为空");return;}else{//将数据获取QString username=usernameedit->text();QString passwd=passwdedit->text();//实例化一个QSqlQuery的类对象QSqlQuery query;//准备sql语句QString sql=QString("insert into user(username,passwd)""values('%1','%2')").arg(username).arg(passwd);//执行sql语句if(!query.exec(sql)){QMessageBox::information(this,"提示","注册失败");return;}else{QMessageBox::information(this,"成功","注册成功");}}
}void MyWnd::loginbtn_slot(){QMessageBox box(this);      //基于属性版本实现消息对话框//将数据获取QString username=usernameedit->text();//实例化一个QSqlQuery的类对象QSqlQuery query;//准备sql语句QString sql=QString("select * from user where username='%1'").arg(username);//执行sql语句if(!query.exec(sql)){QMessageBox::information(this,"提示","查询失败");return;}QString passwd;while(query.next()){passwd=query.record().value("passwd").toString();}if(usernameedit->text()==""||passwdedit->text()==""){QMessageBox::information(this,"提示","用户名或密码不能为空");}else if(usernameedit->text()==username&&passwdedit->text()==passwd){box.setIcon(QMessageBox::Information);box.setWindowTitle("登陆成功");box.setText("登陆成功");box.setStandardButtons(QMessageBox::Ok);box.setDefaultButton(QMessageBox::Ok);box.exec();emit loginbtn_signal();     //发射跳转的信号this->hide();   //隐藏第一个页面}else{box.setIcon(QMessageBox::Question);box.setWindowTitle("匹配错误");box.setText("账号密码不匹配,是否重新登录?");box.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);box.setDefaultButton(QMessageBox::Ok);int ret=box.exec();if(ret==QMessageBox::Ok){usernameedit->clear(); //清空用户框中的内容passwdedit->clear(); //清空密码框中的内容}else{this->close();  //关闭页面}}
}void MyWnd::cancelbtn_slot(){int ret=QMessageBox::warning(this,      //基于静态成员函数版本的消息对话框"是否退出","是否确定要退出登录?",QMessageBox::Yes|QMessageBox::No,QMessageBox::No);if(ret==QMessageBox::Yes){this->close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138006.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础转行网络安全可以做什么工作,内附网络安全自学路线

一直在说网络安全行业好就业、薪资高、前景也好&#xff0c;但是大家对网络安全这个行业具体做什么工作可能还一知半解。所以今天来跟大家聊聊&#xff0c;网络安全学完可以找到什么样的工作&#xff0c;顺便把不同岗位的不同技术要求也说一下。 【点击文章末尾卡片&#xff0…

Spring Security 对请求的处理流程

文章目录 前言系统启动Spring Security 对请求的处理总结 前言 分析Spring Security的核心原理&#xff0c;可以从以下几个方面进行&#xff1a; 系统启动的时候Spring Security做了哪些事情&#xff1f;发起一次请求后Spring Security做了哪些事情&#xff1f; 系统启动 当…

Puppeteer基础入门、常见应用、利用谷歌插件编写Puppeteer脚本

前言 Puppeteer已经听说过很多次了&#xff0c;也见过一些与之相关的文章。但是一直没怎么研究过&#xff0c;现在来简单学习一下。 简介 Puppeteer 是一个 Node 库&#xff0c;它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headles…

【离网逆变器】离网逆变器型号由一个高频DC-DC升压转换器与全桥PI控制电压源逆变器级联组成、逆变器使用带LC滤波器的SPWM调制(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HTML5+CSS3+JS小实例:鼠标控制飞机的飞行方向

实例:鼠标控制飞机的飞行方向 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

Vue项目前端代码防止被调试

项目背景 被安全测试针对了&#xff0c;总是调试我这不太安全的代码。前端代码深度混淆转成十六进制还不行&#xff0c;仍然找到加密方法&#xff0c;对后端数据进行解密。这次就修改了思路换种方法: 我承认阁下很强&#xff0c;但假如, 我是说假如打开控制台是空白页面&…

森林防火可视化智能监管与风险预警系统解决方案

一、方案背景 森林火灾是世界八大自然灾害之一&#xff0c;具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点&#xff0c;严重危及人民生命财产和森林资源安全&#xff0c;甚至引发生态灾难。有效预防和及时控制森林火灾是保护国家生态建设成果、推进生态…

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示&#xff1a; 2.输入“svn”,再按回车&#xff0c;如下图&#xff1a; 3.这我选择的是 Subversive,点击后面的“install”按钮&#xff0c;如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…

【MySQL基础】--- 约束

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、什么…

linux离线安装make

一、下载rpm包 https://pkgs.org/search/?qmake 二、拷贝至服务器 三、安装make rpm -ivh make-3.82-24.el7.x86_64.rpm四、查看是否安装成功 make -v

Docker部署单点Elasticsearch与Kibana

一 、 创建网络 因为需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里创建一个网络&#xff1a; docker network create es-net # 创建一个网络名称为:es-net 二 、拉取并加载镜像 方式一 docker pull elasticsearch:7.12.1 版本为elasticsearch的7…

【面试题】Js数组去重都有哪些方法?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 1. indexOf 定义&#xff1a; indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置…

60从零开始学Java之与数字相关的类有哪些?

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们在解决实际问题时&#xff0c;会经常对数字、日期和系统设置进行处理&#xff0c;比如在我们的代…

期权如何交易?期权如何做模拟交易?

买卖期权的第一步就是要有期权账户&#xff0c;国内的期权品种有商品期权和ETF期权以及股指期权&#xff0c;每种的开户方式和要求都不同&#xff0c;下文为大家介绍期权如何交易&#xff1f;期权如何做模拟交易&#xff1f; 一、期权交易需要开立一个期权账户&#xff0c;可以…

Linux shell编程学习笔记1:关于shell的前世今生

一、什么是Shell&#xff1f; Shell英文单词的原意是“外壳”&#xff0c;在计算机领域专指在操作系统&#xff08;Operating System&#xff09;外层&#xff0c;提供用户界面&#xff08;User Interface&#xff09;的程序&#xff0c;主要负责将用户的命令&#xff08;Comma…

微信小程序与idea后端如何进行数据交互

交互使用的其实就是调用的req.get(url)方法 进行路径访问&#xff0c;你要先保证自己的springboot项目已经成功运行了&#xff1a; 如下&#xff1a; 如何交互的&#xff1f; 微信小程序&#xff1a;如下为index.js页面 在onLoad()事件中调用方法Project.findAllCities() 要…

flex弹性盒模型与阿里图标的使用

华子目录 flex布局flex布局原理flex使用三要素 阿里图标&#xff08;字体&#xff09; flex布局 相关学习网站&#xff1a;http://c.biancheng.net/css3/flex.html 1.flex是当前最主流的布局方式&#xff1a;用它布局起来更方便&#xff0c;取代了浮动的作用。 2.浮动布局有缺…

仪表基础知识培训

压力传感器:E+H PMX5x/FMX5x 一、安装:安装注意事项: 1、水平安装时仪表的呼吸孔(1)需要向下安装,并远离污染物。 2、请勿用坚硬的物体擦拭或接触膜片。 3、请勿安装在水泵的入口和搅拌叶附近 二、供电、接线、信号、:二线制,仪表输出4-20mA 三、量程:设置最大最小量程…

Stable Diffusion AI绘图使用记录

1、下载安装使用 官方网站https://github.com/AUTOMATIC1111/stable-diffusion-webui 跟着一步步安装就行&#xff08;英文版的&#xff09; 2、真人转二次元 下载控制插件Contro lnetGitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet 按照官方的安…

基于springboot+vue的便利店信息管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…