0115qt聊天室客户端+数据库

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlDatabase>//数据库管理类
#include <QSqlQuery>//执行sql语句类
#include <QSqlRecord>//数据库记录类
#include <QSqlError>//数据库错误类
#include <QMessageBox>//消息对话框类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_addBtn_clicked();void on_showBtn_clicked();void on_delBtn_clicked();void on_updateBtn_clicked();private:Ui::Widget *ui;//实例化一个数据库对象QSqlDatabase db;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//判断是否有该数据库if(!db.contains("stuInfo.db")){//说明不存在数据库,则创建db=QSqlDatabase::addDatabase("QSQLITE");//增加一个数据库,驱动为sqlite3//给创建的数据库命名db.setDatabaseName("stdInfo");}//打开数据库if(!db.open()){QMessageBox::information(this,"","打开数据库失败!");return;}//创建数据库表//实例化一个执行Sql语句的实例化对象QSqlQuery query;//准备Sql语句QString sql="create table if not exists stu_info_table(""id integer primary key autoincrement,""numb integer,""name varchar(20),""sex varchar(4),""score integer)";//执行sql语句if(query.exec(sql)){QMessageBox::information(this,"","创建数据库表成功!");}else{QMessageBox::information(this,"","创建数据库表失败!");}}Widget::~Widget()
{delete ui;
}//添加按钮对应的槽函数处理
void Widget::on_addBtn_clicked()
{//获取Ui界面的学生信息int numb=ui->numberEdit->text().toUInt();QString name=ui->nameEdit->text();QString sex=ui->sexEdit->text();int score=ui->scoreEdit->text().toUInt();//判断用户是否信息是否填写完整if(numb==0||name.isEmpty()||sex.isEmpty()||score==0){//如果信息不完整,提示,并退出QMessageBox::information(this,"","请将信息填写完整");return;}//用户信息填写已经填写完整//实例化一个执行sql语句的对象QSqlQuery query;//准备sql语句QString sql=QString("insert into stu_info_table(numb,name,sex,score)""values(%1,'%2','%3','%4')").arg(numb).arg(name).arg(sex).arg(score);//arg()的返回值是自身的引用,所以可以接着用//执行sql语句if(query.exec(sql)){QMessageBox::information(this,"","添加成功!");}else{QMessageBox::information(this,"","添加失败!");}
}
//显示按钮对应的槽函数处理
void Widget::on_showBtn_clicked()
{ui->tableWidget->clear();//准备执行sql的对象QSqlQuery query;QString sql="select *from stu_info_table";//如果查询失败if(!query.exec(sql)){QMessageBox::information(this,"","查询失败!");return;}//查询成功,所查询的信息就已经存放到query中了//遍历int i=0;//记录行int j=0;//记录列while(query.next()){for(j=0;j<query.record().count();j++)//遍历列{//将数据放到ui界面上ui->tableWidget->setItem(i,j,new QTableWidgetItem(query.value(j+1).toString()));}i++;//行数递增}
}
//删除按钮对应的槽函数处理
void Widget::on_delBtn_clicked()
{//准备执行sql语句的对象QSqlQuery query;int numb=ui->numberEdit->text().toUInt();QString sql=QString("delete from stu_info_table where  numb=%1 ").arg(numb);//判断删除成功失败if(!query.exec(sql)){QMessageBox::information(this,"","删除失败!");return;}}
//修改按钮对应的槽函数处理
void Widget::on_updateBtn_clicked()
{//准备执行sql语句的对象QSqlQuery query;int numb=ui->numberEdit->text().toUInt();QString name=ui->nameEdit->text();QString sex=ui->sexEdit->text();int score=ui->scoreEdit->text().toUInt();//判断用户是否信息是否填写完整if(numb==0||name.isEmpty()){//如果信息不完整,提示,并退出QMessageBox::information(this,"","请填入修改的信息");return;}QString sql=QString("update stu_info_table set name='%1' where numb=%2").arg(name).arg(numb);if(!query.exec(sql)){QMessageBox::information(this,"","修改失败!");return;}}

0115qt - 幕布

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

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

相关文章

win10安装ssh服务

前置条件&#xff1a; 远程虚拟机&#xff0c;防火墙关闭&#xff0c;本地主机与虚拟机互相可以ping通 虚拟机是win10专业版本 操作步骤&#xff1a; 1、搜索框搜索“Windows PowerShell”并以管理员身份运行 2、输入如下代码&#xff0c;检查本地是否有ssh服务&#xff0c…

【Docker】网络模式➕自定义网络

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 一.Docker网络模式的介绍 二. 网桥模…

Linux内核架构和工作原理详解(二)

Linux内核体系结构简析简析 图1 Linux系统层次结构 最上面是用户&#xff08;或应用程序&#xff09;空间。这是用户应用程序执行的地方。用户空间之下是内核空间&#xff0c;Linux 内核正是位于这里。GNU C Library &#xff08;glibc&#xff09;也在这里。它提供了连接内核…

【react】记录一次react组件props依赖异步数据(setFieldsValue)后传递form给子组件,再逐层传递给孙子组件引起的未渲染异常

背景 react祖父组件设置异步数据&#xff08;setFieldsValue&#xff09;后传递form给子组件&#xff0c;再逐层传递给孙子组件引起的未渲染异常&#xff0c;孙子组件如果不设置useEffect和useState去监听value的值进行重渲染&#xff0c;会出现获取得到value最新值&#xff0…

【JVM】类的生命周期

目录 类的生命周期 加载阶段 连接阶段 初始化阶段 类的使用阶段 类的加载阶段 类的生命周期 加载阶段 在加载阶段&#xff0c;类加载器首先会通过一个类的全限定名来获取定义此类的二进制字节流。这个步骤主要是将整个Class 文件解析成二进制流。 &#xff08;全限定名是…

海外代理IP怎么用?常见使用问题及解决方案

海外代理IP是指提供全球范围内的代理服务器&#xff0c;代理服务器充当IP与目标网站之间的中介&#xff0c;可以起到安全匿名、提高网速、突破网络壁垒的作用。在使用代理IP的过程中&#xff0c;用户可能会遇到各种挑战&#xff0c;如连接问题、速度慢等。理解这些问题的原因并…

HCIP第一次练习 -- RIP复习实验

要求&#xff1a; 需求:R1-R2-R3-R4-R5运行RIPV2 R6-R7运行RIPV1 1.使用合理地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回172.16.1.1/24172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条自数量,增加路由传递安全性 5.R5创建一个环回模拟运营商,不…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇&#xff08;Shin Tae-yong&#xff09;教练是足球界的传奇人物&#xff0c;他来到 The Sandbox&#xff0c;推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练&#xff0c;他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

在Dynamics 365中通过代码为用户添加角色

作为一个Dynamics 365开发者&#xff0c;你可能会遇到这样的需求&#xff1a;通过代码为用户分配角色。这个任务的实现方式可能并不明显&#xff0c;因为你不能直接创建systemuserroles实体。但别担心&#xff0c;我将在这篇文章中解释如何做到这一点。 首先&#xff0c;我们需…

基于ArcGIS的晕线制作

在借助ArcGIS进行制图时&#xff0c;我们有时需要为矢量边界添加晕线&#xff0c;今天就来探索一下基于ArcGIS的晕线制作操作。 软件版本&#xff1a;ArcMap10.4.1 方法一&#xff1a;制作多环缓冲区 工具路径&#xff1a;Analysis Tools-Proximity-Mutiple Ring Buffer 思…

Python 基础(七):与时间相关的模块

目录 1 time 模块1.1 struct_time 类1.2 常用函数 1 time 模块 time 模块提供了很多与时间相关的类和函数&#xff0c;下面我们介绍一些常用的。 1.1 struct_time 类 time 模块的 struct_time 类代表一个时间对象&#xff0c;可以通过索引和属性名访问值。对应关系如下所示&…

前后端跨域问题

告别烦恼&#xff0c;彻底解决跨域问题的终极指南-chrome的安全进阶之路_chrom 强制跨域-CSDN博客

融优学堂-艺术史

导论4 1.【单选题】根据导论的讲解&#xff0c;下列表述正确的是&#xff08;&#xff09;。&#xff08;1&#xff09;艺术品是因人的活动而被创造出来的人工制品。&#xff08;2&#xff09;许多物品被制造出来时&#xff0c;最初的目的是满足某种实用的用途&#xff0c;而不…

在linux安装LAStools

LAStools下载&#xff1a; https://github.com/LAStools/LAStools/releases 编译安装&#xff1a; # 设置安装路径 cmake -DCMAKE_INSTALL_PREFIX/home/vis/work/SourceCode/LAStools-2.0.2/build cmake . cmake --build . make install编译后的库&#xff1a;

【昕宝爸爸小模块】深入浅出之JDK21 中的虚拟线程到底是怎么回事(二)

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

node版本过高与node-sass不兼容问题

第一步&#xff1a;安装yarn 安装cnpm 第二步&#xff1a;yarn install 这一步可能会出现node版本过高报错 yarn config set ignore-engines true 执行 自动补充兼容命令 然后重新yarn install 出现报错&#xff1a; 第三步&#xff1a;使用cnpm 单独安装 cnpm install node-…

Acrel-1000安科瑞变电站综合自动化系统选型与应用

摘 要&#xff1a;变电站综合自动化系统是将变电站内的二次设备经过功能的组合和优化设计&#xff0c;利用先进的计算机技术、通信技术、信号处理技术&#xff0c;实现对全变电站的主要设备和输、配电线路的自动监视、测量、控制、保护、并与上级调度通信的综合性自动化功能。为…

【Docker】网络配置的三种方式

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

烧钱地推的反思

烧钱地推是一种独特的互联网企业的市场竞争手段。 1.地推的成本分析 最开始比较低等的地推方式是&#xff0c;为了获得一手的活动客户流&#xff0c;最开始的方式主要有扫码关注、注册或是转发送一些廉价的赠品&#xff0c;如气球、杯子、毛绒玩具、廉价多肉等等。 除此之外…