9.25day5---Qt

news2025/1/12 11:58:53

登录页面设计,建立用户注册以及登录的数据库,数据库保存用户名和密码

(ps:本篇只完成了登录功能,其他功能,请见下篇嘿嘿。)

 

 再次注册则失败:

 

 

代码如下: 

头文件:

登录后聊天室界面(头文件):

#ifndef LT_JM_H
#define LT_JM_H

#include <QWidget>

namespace Ui {
class lt_jm;
}

class lt_jm : public QWidget
{
    Q_OBJECT



public slots:
    void jump_slot();         //接收跳转信号的槽函数

public:
    explicit lt_jm(QWidget *parent = nullptr);
    ~lt_jm();

private:
    Ui::lt_jm *ui;
};

#endif // LT_JM_H

 注册头文件:

#ifndef ZC_JM_H
#define ZC_JM_H

#include <QWidget>
#include <QMessageBox>
#include <QSqlQuery>

namespace Ui {
class zc_jm;
}

class zc_jm : public QWidget
{
    Q_OBJECT

public:
    explicit zc_jm(QWidget *parent = nullptr);
    ~zc_jm();



public slots:
    void jump_slot();         //接收跳转信号的槽函数

private slots:
    void on_pushButton_clicked();

private:
    Ui::zc_jm *ui;
};

#endif // ZC_JM_H

 ui界面头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include "zc_jm.h"
#include "lt_jm.h"
#include <QWidget>
#include<QSqlDatabase>          //数据库管理类
#include<QSqlQuery>              //执行sql语句的类
#include<QSqlRecord>              //数据库记录的类
#include<QMessageBox>            //消息对话框

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();


signals:
    void jump();           //自定义跳转信号函数
    void jump1();


private slots:
    void on_dl_clicked();

    void on_zc_clicked();

    void on_tc_clicked();

private:
    Ui::Widget *ui;
    lt_jm *jm2;             //定义另一个界面的指针
    zc_jm *jm3;             //定义另一个界面的指针
    QSqlDatabase db;            //定义一个数据库的类对象
};
#endif // WIDGET_H

功能文件:

聊天室功能函数:

#include "lt_jm.h"
#include "ui_lt_jm.h"

lt_jm::lt_jm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::lt_jm)
{
    ui->setupUi(this);
}

lt_jm::~lt_jm()
{
    delete ui;
}

void lt_jm::jump_slot()
{
    this->show();            //将自己界面进行展示
}

注册功能函数:

#include "zc_jm.h"
#include "ui_zc_jm.h"

zc_jm::zc_jm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::zc_jm)
{
    ui->setupUi(this);
    this->setFixedSize(500,450);     //设置固定尺寸


}

zc_jm::~zc_jm()
{
    delete ui;
}

void zc_jm::jump_slot()
{
    this->show();            //将自己界面进行展示
}

void zc_jm::on_pushButton_clicked()
{
    //获取ui界面中要录入的数据
    QString id = ui->lineEdit->text();
    QString pwd = ui->lineEdit_2->text();

    //要确保每个编辑器中都有数据
    if(id.isEmpty() || pwd.isEmpty())
    {
        QMessageBox::information(this,"提示","请将信息填写完整");
        return;
    }

    //准备sql语句
    QString sql = QString("insert into user_pwd(ID,password) "
                  "values('%1','%2')").arg(id).arg(pwd);
    //准备语句执行者
    QSqlQuery querry;
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"失败", "添加失败");
        return;
    }else
    {
        QMessageBox::information(this,"成功", "添加成功");
    }
}

 ui界面功能函数:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(500,450);     //设置固定尺寸
    this->setWindowTitle("My QQ");               //设置窗口标题
    this->setWindowIcon(QIcon(":/tupian/OIP-C (1).jpg"));//设置窗口图标
    this->setStyleSheet("background-color:skyblue;");              //设置样式表
    this->setWindowOpacity(1); //设置窗口透明度

    ui->dl->setIcon(QIcon(":/tupian/1.jpg"));//设置按钮图标
    ui->zc->setIcon(QIcon(":/tupian/OIP-C (6).jpg"));
    ui->tc->setIcon(QIcon(":/tupian/OIP-C (5).jpg"));
    ui->dl->setStyleSheet("background-color:white; border-radius:10px;");      //设置样式表
    ui->zc->setStyleSheet("background-color:white; border-radius:10px;");      //设置样式表
    ui->tc->setStyleSheet("background-color:white; border-radius:10px;");      //设置样式表

    ui->pwd->setEchoMode(QLineEdit::Password);        //设置回显模式

    ui->logo->setPixmap(QPixmap(":/tupian/OIP-C (4).jpg"));       //设置图片
    ui->logo->setScaledContents(true);                      //设置内容自适应
    ui->yhm_t->setPixmap(QPixmap(":/tupian/OIP-C.jpg"));
    ui->yhm_t->setScaledContents(true);
    ui->pwd_t->setPixmap(QPixmap(":/tupian/OIP-C (2).jpg"));
    ui->pwd_t->setScaledContents(true);

    if(!db.contains("mydatabase.db"))
    {
        db = QSqlDatabase::addDatabase("QSQLITE");//添加一个数据库,调用该类中的静态成员函数addDatabase
        db.setDatabaseName("mydatabase.db");//设置数据库的名字
    }
    if(!db.open())    //打开数据库
    {
        QMessageBox::information(this,"失败","数据库打开失败");
        return;
    }
    QString sql = "create table if not exists user_pwd("           //创建表
                  "ID varchar(16) primary key,"                   //账号,主键
                  "password varchar(16))";                       //密码
    QSqlQuery querry;                                  //准备语句执行者
    if(!querry.exec(sql))    //让语句执行者执行sql语句
    {
        QMessageBox::information(this, "失败", "创建表失败");
        return;
    }



    jm2 = new lt_jm;            //给另一个界面实例化空间
    connect(this,&Widget::jump,jm2,&lt_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
    jm3 = new zc_jm;            //给另一个界面实例化空间
    connect(this,&Widget::jump1,jm3,&zc_jm::jump_slot);//将当前界面的信号,与s1界面的槽函数进行连接
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_dl_clicked()
{
    QString sql = "select * from stu_info";
    QSqlQuery querry;
    if(!querry.exec(sql))//执行sql语句
    {
        QMessageBox::information(this,"提示","显示失败");
        return;
    }
    int i = 0;               //记录行数
    while(querry.next())
    {
        //在该循环中,querry对象表示的是当前的记录
        //可以使用成员函数: QSqlRecord record() const;获取当前记录
        //可以使用QSqlRecord成员函数,count():获取当前记录中的项数
        //可以使用QSqlRecord成员函数,value(index):获取当前记录中第index项的值



        //遍历每条记录中的每一项的内容
        for(int j=0; j<querry.record().count(); j++)
        {
            //ui->tableWidget->setItem(i,j, new QTableWidgetItem(querry.record().value(j).toString()));
        }




        i++;         //继续遍历下一条记录
    }
    emit jump();
    this->hide();        //将当前界面隐藏
}

void Widget::on_zc_clicked()
{
    emit jump1();
    this->hide();        //将当前界面隐藏

}

void Widget::on_tc_clicked()
{

}

 

测试文件:

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android字体大小dp,sp,px系统设置字体大小变化表现

Android字体大小dp,sp,px系统设置字体大小变化表现 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

14基于MATLAB的鲸鱼优化VMD参数,以熵值为适应度函数,对VMD参数惩罚因子和层数进行寻优,确定最优值并进行信号分解,程序已调通,可以直接运行。

基于MATLAB的鲸鱼优化VMD参数&#xff0c;以熵值为适应度函数&#xff0c;对VMD参数惩罚因子和层数进行寻优&#xff0c;确定最优值并进行信号分解&#xff0c;程序已调通&#xff0c;可以直接运行。

Idea操作Git合并另一个分支的部分提交

现有master、dev两个分支&#xff0c;master有提交1、2、3、4、5、6、7&#xff0c;dev是从master提交的3拉出来的分支&#xff08;Reset Current Branch to Here…&#xff0c;Mixed模式&#xff09;&#xff0c;有提交1、2、3&#xff0c;现在的需求是dev分支只需要合并maste…

解释器风格架构C# 代码

/*解释器风格架构是一种基于组件的设计架构&#xff0c;它将应用程序分解为一系列组件&#xff0c;每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤&#xff1a;定义组件&#xff1a;首先&#xff0c;定义…

10.2servlet基础2

一.SmartTomcat 1.第一次使用需要进行配置. 二.异常处理 1.404:浏览器访问的资源,在服务器上不存在. a.检查请求的路径和服务器配置的是否一致(大小写,空格,标点符号). b. 确认webapp是否被正确加载(检查web.xml没有/目录错误/内容错误/名字拼写错误)(多多关注日志信息). 2…

v-md-editor踩坑记

1、prismjs is not a function Vue3vite。在vueprees主题中&#xff0c;安装扩展代码高亮语音包运行失败。 解决方案&#xff1a; 查看下载好的本地包&#xff0c;尝试解构使用&#xff0c;执行成功 import { defineConfig } from vite import vue from vitejs/plugin-vue …

Vue系列(四)之 Vue路由介绍和Node.js的环境搭建

目录 一. Vue路由 1.1 Vue路由是什么 1.2 SPA是什么 1.3 Vue路由的使用步骤 二. Node.js环境搭建 2.1 Node.js是什么 2.2 npm是什么 2.3 Node.js环境搭建 1. 下载Node.js 2. 解压 3. 配置环境变量 4. 配置npm全局模块路径和cache默认安装位置 5. 修改npm镜像提高下…

蓝桥杯每日一题2023.9.12

3491. 完全平方数 - AcWing题库 题目描述 分析 完全平方数的一个特点&#xff1a; 所有的质因子的个数为偶数。eg1.9的质因子为3&#xff0c;3的个数为2&#xff0c;得到了9&#xff08;3*39&#xff09; eg2.81的质因子为3&#xff0c;3的个数为4&#xff0c;得到81&#…

安卓逆向 - EdXposed LSPosed VirtualXposed

一、引言 接上篇&#xff1a;安卓逆向 - Xposed入门教程_小馒头yy的博客-CSDN博客 我们介绍了Xposed入门安装使用&#xff0c;但是只支持到Android 8&#xff0c;并且安装模块需要重启。今天我们来看看Xposed的其他版本。 二、各种Xposed框架对比 1、Xposed 只支持到安卓8&…

python+django美食菜谱分享网站系统平台

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .本系统采用了nodejs语言的vue框架&#xff0c;数据采用MySQL数据库进行存储。结合B/S结…

【数据结构】哈希表(详)

文章目录 前言正文一、基本概念二、基本原理1.哈希函数1.1直接定址法&#xff08;常用&#xff09;1.2除留余数法&#xff08;常用&#xff09;1.3 平方取中法&#xff08;了解&#xff09;1.4 折叠法(了解)1.5 随机数法(了解)1.6数学分析法(了解) 2.哈希冲突2.1 平均查找长度2…

第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序

一、Ubuntu18.04中安装并且编译移植mysql驱动程序连接qt执行程序 1 、安装Mysql sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-d2、查看是否安装成功&#xff0c;即查看MySQL版本 mysql --version 3、MySQL启动…

中秋节听夜曲,Android OpenGL 呈现周董专属的玉兔主题音乐播放器

概述 前几天发现QQ音乐有个好玩的功能&#xff0c;为用户提供了多种 播放器主题&#xff0c;其中 原神 的主题让我眼前一亮&#xff1a; 当然&#xff0c;诸如 换肤、主题 类的功能已经屡见不鲜&#xff0c;但这类沉浸式播放器的听歌体验确实不错。 见猎心喜&#xff0c;正好…

FPGA千兆网 UDP 网络视频传输,基于88E1518 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、我这里已有的以太网方案3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条UDP协议栈UDP视频数据组包UDP协议栈数据发送UDP协议栈数据缓冲IP地址、端口号的修改Tri Mode Ethernet MAC介绍以及移植注意事项88E1518 PHYQT上位机和源码…

人工智能AI 全栈体系(五)

第一章 神经网络是如何实现的 为什么使用 ReLu 函数&#xff1f; 五、梯度消失问题 1. 什么是梯度消失问题&#xff1f; 前面我们介绍的 BP 算法中&#xff0c;是这样更新权重值的&#xff1a; δ ∗ h o h ( 1 − o h ) ∑ ∗ k ∈ 后续 ( h ) δ ∗ k w ∗ k h \delta*h …

基于Python+Flask实现一个简易网页验证码登录系统案例

在当今的互联网世界中&#xff0c;为了防止恶意访问&#xff0c;许多网站在登录和注册表单中都采用了验证码技术。验证码可以防止机器人自动提交表单&#xff0c;确保提交行为背后有一个真实的人类用户。 本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系…

在线教育线上课堂知识付费源码 网络课堂在线课堂系统源码 含完整代码包和搭建教程

随着互联网技术的不断发展&#xff0c;在线教育逐渐成为了人们获取知识和技能的重要途径。线上课堂作为在线教育的一种具体实现方式&#xff0c;为广大学生提供了便捷、高效的学习平台。 分享一个在线教育线上课堂知识付费源码、网络课堂在线课堂系统源码&#xff0c;含完整搭…

数据分析的-五种常用方法实例

一、对照 俗称对比&#xff0c;单独看一个数据是不会有感觉的&#xff0c;必需跟另一个数据做对比才会有感觉。比如下面的图a和图b。 图a毫无感觉 图b经过跟昨天的成交量对比&#xff0c;就会发现&#xff0c;今天跟昨天实则差了一大截。 这是最基本的思路&#xff0c;也是最重…

数字图像处理中的击中与击不中运算(数字图像处理大题复习 P10)

文章目录 模板元 B 解析尝试覆盖得到结果 击中与击不中 可以看作就是 进阶版的腐蚀 模板元 B 解析 1 就是要求是 1 0 就是要求是 0 x 就是不管&#xff0c;随便是什么 尝试覆盖 如果我们选择一个地方覆盖&#xff0c;他符合这个模板即可 得到结果 这样我们就得到了击中与…

润和软件HopeStage与华宇信息TAS应用中间件完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与北京华宇信息技术有限公司&#xff08;以下简称“华宇信息”&#xff09;TAS应用中间件软件完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统Hope…