qt day 6

登录界面

#include "window.h"
#include<QDebug>
#include<QIcon>
Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent)           //显性调用父类的构造函数
{//判断数据库对象是否包含了自己使用的数据库Student.dbif(!db.contains("Student.db")){//添加一个数据库db = QSqlDatabase::addDatabase("QSQLITE");  // 表明使用的是sqlite3版本的数据库//给数据库命名db.setDatabaseName("St.db");}//打开数据库if(!db.open()){QMessageBox::information(this,"提示","数据库打开失败");}//此时说明数据库已经创建并打开了,然后创建数据表//创建数据表要用sql语句,用QSQLQuerry类对象来完成//准备sql语句QString sql = "create table if not exists my("             //创建表的sql语句"name integer primary key,"           //id主键, 允许自增"pass integer)";        //性别  字符串//定义语句执行者QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"失败","创建失败");return ;}//this->resize(430,330);this->resize(QSize(800,600));//  this->setMaximumSize(430,330);//  this->setMinimumSize(430,330);this->setFixedSize(430,330);// 设置尺寸最值//窗口标题this->setWindowTitle("WeChat");//窗口iconthis->setWindowIcon(QIcon(":/icon/111.png"));//设置背景色this->setStyleSheet("background-color:skyblue;");//设置窗口透明度this->setWindowOpacity(1);//无参构造bt1 =new QPushButton;//给组件指定父组件,让其依附于界面bt1->setParent(this);//设置组件文本内容bt1->setText("开始");this->setFixedSize(430,330);//设置按钮组件的大小bt1->resize(QSize(50,30));//移动组件位置bt1->move(200,290);//设置样式表bt1->setStyleSheet("background-color:red");bt1->setIcon(QIcon("E:\\c\\qt1\\111.png"));//2.构造一个按钮bt2 = new QPushButton(this);bt2->setText("取消");bt2->resize(bt1->size());bt2->move(300,290);// bt2->setStyleSheet("background-color:blue");// bt2->setEnabled(false);bt2->setIcon(QIcon("E:\\c\\qt1\\111.png"));//3.创建图标bt3 =new QLabel(this);bt3->resize(bt1->size());bt3->move(100,170);bt3->setPixmap(QString("E:\\c\\qt1\\111.png"));//设置 内容自适应bt3->setScaledContents(true);//2.构造一个按钮bt6 = new QPushButton(this);bt6->setText("注册");bt6->resize(bt1->size());bt6->move(100,290);bt6->setStyleSheet("background-color:yellow");bt6->setIcon(QIcon("E:\\c\\qt1\\111.png"));connect(this->bt6,&QPushButton::clicked,this,&Window::bt6_clicked);//4.创建图标bt4 =new QLabel(this);bt4->resize(bt1->size());bt4->move(100,220);bt4->setPixmap(QString("E:\\c\\qt1\\222.png"));//设置 内容自适应bt4->setScaledContents(true);/***********************************/ed1 =new QLineEdit(this);//ed1->setText(""); //设置编辑器中的文本//设置占位文本ed1->setPlaceholderText("密码:");//设置尺寸ed1->resize(180,30);//移动位置ed1->move(bt4->x()+60,bt4->y());ed1->setPlaceholderText("密码:");ed1->setEchoMode(QLineEdit::Password);//2.构造一个行编辑器,构造时给定父,以及文本内容ed2 = new QLineEdit(this);ed2->resize(180,30);ed2->move(bt3->x()+60,bt3->y());ed2->setPlaceholderText("账号 /手机 /邮箱...");/***********************************/la1 =new QLabel(this);la1 ->resize(430,140);la1->setPixmap(QString("E:\\c\\qt1\\222.png"));//设置 内容自适应la1->setScaledContents(true);connect(this->bt1,&QPushButton::clicked,this,&Window::bt1_clicked);//connect(this,&Window::my_signal,[&](){this->close();});//使用qt4连接,connect(bt2,SIGNAL(clicked()),this,SLOT(close()));}
Window::~Window()
{}
//补充的注册
void Window::bt6_clicked()
{int name_1 = this->ed2->text().toInt();QString pass_1 = this->ed1->text();if(name_1 == 0 ||pass_1.isEmpty()){QMessageBox::information(this,"提示","请将数据填写正确");return ;}QSqlQuery querry;//准备sql语句QString sql2 = QString("select * from my where name = '%1'").arg(name_1);if(!querry.exec(sql2)){QMessageBox::information(this,"提示","注册失败");return ;}else{QString sql = QString("insert into my(name,pass)""values('%1', '%2')").arg(name_1).arg(pass_1);if(!querry.exec(sql)){QMessageBox::information(this,"提示","注册失败");return ;}QMessageBox::information(this,"提示","注册成功");}}void Window::bt1_clicked()
{QMessageBox box(QMessageBox::Critical,"错误","密码错误",QMessageBox::Yes|QMessageBox::No,this);QMessageBox box2(QMessageBox::Critical,"错误","账号错误",QMessageBox::Yes|QMessageBox::No,this);QMessageBox box3(QMessageBox::Information,"信息","登录成功",QMessageBox::Ok|QMessageBox::Cancel,this);int name_1 = this->ed2->text().toInt();QString pass_1 = this->ed1->text();if(name_1 == 0 ||pass_1.isEmpty()){QMessageBox::information(this,"提示","请将数据填写正确");return ;}QSqlQuery querry;QString sql = QString("select * from my where name = '%1' and pass = '%2'").arg(name_1).arg(pass_1);if(querry.exec(sql)){if(querry.next()){qDebug()<<"登录成功";int rew =box3.exec();if(rew ==QMessageBox::Ok){emit jump();emit my_signal();}else {int ret =QMessageBox::question(this,"问题","是否取消登录",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);if(ret ==QMessageBox::Yes){emit my_signal();}}}else{int ret =box.exec();if(ret ==QMessageBox::Yes){Window::ed1->setText("");}elsethis->close();}}else{qDebug()<<"账号错误";int rex =box2.exec();if(rex ==QMessageBox::Yes){Window::ed1->setText("");Window::ed2->setText("");}elsethis->close();}
}

 查找:

void Widget::on_serchBtn_clicked()
{int numb_ui = ui->numbEdit->text().toInt();//准备sql语句QString sql = QString("select * from myTable where numb = '%1'").arg(numb_ui);//准备语句执行者QSqlQuery querry;//执行sql语句if(!querry.exec(sql)){QMessageBox::information(this,"失败","查询失败");return ;}int i = 0;while (querry.next()) {int k =1;// 将查询结果插入到QTableWidget中for (int j = 4; j < 8; j++) {ui->tableWidget->setItem(i,j-4,new QTableWidgetItem(querry.record().value(k).toString()));k++;}i++;}
}

 

网络聊天室,客户端

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->disconbtn->setEnabled(false);//给客户端指针实例化空间socket = new QTcpSocket(this);//如果连接服务器成功,该客户端就会发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需要连接一次,所以写在构造函数connect(socket,&QTcpSocket::connected,this,&Widget::connected_slot);//客户端与服务器连接成功后,如果服务器向客户端发来数据,那么该客户端就会自动发射一个readyRead信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑connect(socket,&QTcpSocket::readyRead,this,&Widget::readyRead_slot);//当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected的信号//我们可以将该信号与自定义的槽函数连接//由于只要连接一次,所以写在构造函数connect(socket,&QTcpSocket::disconnected,this,&Widget::disconnected_slot);}Widget::~Widget()
{delete ui;
}void Widget::on_conbtn_clicked()
{//获取ui界面的信息userName = ui->usernameLab->text();    //获取用户名QString hostName = ui->ipEdit->text();  //获取ipquint16 port = ui->portEdit->text().toUInt();   //获取port//调用函数链接到主机//参数1:服务器的主机地址//参数2:端口号socket->connectToHost(hostName,port);//如果连接服务器成功,该客户端就会发射一个connected的信号//我们可以将该信号连接到自定义的槽函数中处理相关逻辑//由于该连接只需要连接一次,所以写在构造函数ui->conbtn->setEnabled(false);ui->disconbtn->setEnabled(true);ui->usernameLab->setEnabled(false);ui->ipEdit->setEnabled(false);ui->portEdit->setEnabled(false);
}
//关于处理connected信号的槽函数的定义
void Widget::connected_slot()
{QMessageBox::information(this,"成功","连接服务器成功");//顺便向服务器发送一条消息xxx进入聊天室QString msg = userName +": 进入聊天室";socket->write(msg.toLocal8Bit());}
//关于处理readyRead信号的槽函数的定义
void Widget::readyRead_slot()
{//读取该客户端中的数据QByteArray msg = socket->readAll();//将数据展示在ui界面ui->msglist->addItem(QString::fromLocal8Bit(msg));
}
//发送按钮对应的槽函数
void Widget::on_sendbtn_clicked()
{//获取ui界面编辑的文本内容QString m =ui->msgEdit->text();//整合发送的信息QString msg =userName+":"+m;//将消息发送给服务器socket->write(msg.toLocal8Bit());//将消息编辑器中的内容清空ui->msgEdit->clear();
}
//断开服务器按钮对应的槽函数
void Widget::on_disconbtn_clicked()
{//准备要发送人的信息QString msg =userName+":离开聊天室";socket->write(msg.toLocal8Bit());//调用成员函数disconnectFromHost//功能:断开客户端与服务器的连接socket->disconnectFromHost();//当客户端与服务器断开连接后,该客户端就会自动发射一个disconnected的信号//我们可以将该信号与自定义的槽函数连接//由于只要连接一次,所以写在构造函数socket->write(msg.toLocal8Bit());ui->conbtn->setEnabled(true);ui->disconbtn->setEnabled(false);ui->usernameLab->setEnabled(true);ui->ipEdit->setEnabled(true);ui->portEdit->setEnabled(true);
}
//关于处理disconnected信号的槽函数的定义
void Widget::disconnected_slot()
{QMessageBox::information(this,"退出","退出服务器");//顺便向服务器发送一条消息xxx退出聊天室QString msg = userName +": 退出聊天室";}

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

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

相关文章

网安周报|Chaes恶意软件的新Python变种针对银行和物流行业

1、Chaes恶意软件的新Python变种针对银行和物流行业 银行和物流业正受到名为Chaes的恶意软件的重新设计变种的冲击。Chaes于2020年首次出现&#xff0c;它的目标是拉丁美洲&#xff08;尤其是巴西&#xff09;的电子商务客户&#xff0c;以窃取敏感的财务信息。该恶意软件的最新…

【React学习】React高级特性

1. 函数式组件和类组件区别 函数式组件 函数式组件是一种简单的组件定义方式&#xff0c;它是一个以JavaScript函数为基础的组件。 可以把函数式组件理解为纯函数&#xff0c;它的输入为props&#xff0c;输出为JSX。函数式组件没有状态&#xff0c;也没有生命周期。 functio…

NFTScan NFT API 在 NFTFi 开发中的应用

NFTFi 是“NFT”和“Finance”的缩写&#xff0c;旨在“增加 NFT 流动性&#xff0c;提供现金流”&#xff0c;NFTFi 是为 NFT 提供金融实用性的去中心化协议和应用程序的新兴生态系统&#xff0c;及使用 NFT 作为基础层在其上建设经济基础设施。 在实践中&#xff0c;NFTFi 协…

【数据结构】串

串 串的顺序实现简单的模式匹配算法KMP算法KMP算法的进一步优化 串的顺序实现 初始化 #define MaxSize 50 typedef char ElemType;//顺序存储表示 typedef struct{ElemType data[MaxSize];int length; }SString;/*** 初始化串*/ void InitString(SString *string) {for (int …

TensorFlow 03(Keras)

一、tf.keras tf.keras是TensorFlow 2.0的高阶API接口&#xff0c;为TensorFlow的代码提供了新的风格和设计模式&#xff0c;大大提升了TF代码的简洁性和复用性&#xff0c;官方也推荐使用tf.keras来进行模型设计和开发。 1.1 tf.keras中常用模块 如下表所示: 1.2 常用方法 …

第7章_瑞萨MCU零基础入门系列教程之UART

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

Java学习笔记——34多线程01

多线程 实现多线程进程和线程的区别多线程的实现方式方式一&#xff1a;继承Thread类设置线程名称线程调度线程控制线程生命周期 方式二&#xff1a;实现Runnable接口 实现多线程 进程和线程的区别 进程&#xff1a;是正在运行的程序 是系统进行资源分配和调用的独立单位每一…

华为云云耀云服务器L实例评测|部署spring项目端口开放问题的解决 服务器项目环境搭建MySQL,Redis,Minio...指南

目录 引出书接上回&#xff0c;部署spring项目&#xff0c;端口访问失败最后排查结果反馈 尝试的几种解决方案【未成功】1.指定tomcat启动ipv4端口2.添加开放端口规则保存规则防火墙相关命令记录 最终成功解决【成功&#xff01;】用firewall成功了问题来了&#xff0c;如果这里…

一个好玩的浏览器插件

背景 最近抽空开发了一个有意思的浏览器插件。背景是我们在开发过程中有时需要做一些测试验证&#xff0c;需要修改请求头字段和响应头字段的内容&#xff0c;有时需要在页面做测试&#xff0c;反复请求同一个接口&#xff0c;并修改一些字段。 如果此时使用nginx做代理转发再…

机器学习——自然语言处理(NLP)一

机器学习——自然语言处理&#xff08;NLP&#xff09;一 文章目录 前言一、TF-IDF算法1.1. 原理1.2. 算法步骤&#xff1a;1.2.1. 文本预处理1.2.2. 构建词袋模型1.2.3. 计算TF-IDF值1.2.4. 特征选择 1.3. 代码实现1.3.1. TF-IDF1.3.2 计数器向量化文本1.3.3. 两者的区别1.3.4…

stm32---基本定时器(TIM6,TIM7)

STM32F1的定时器非常多&#xff0c;由两个基本定时器&#xff08;TIM6&#xff0c;TIM7&#xff09;、4个通用定时器&#xff08;TIM2-TIM5&#xff09;和两个高级定时器&#xff08;TIM&#xff11;&#xff0c;TIM&#xff18;&#xff09;组成。基本定时器的功能最为简单&am…

嵌入式Linux驱动开发(同步与互斥专题)(一)

一、内联汇编 1.1、语法 内联汇编实现加法 1.2、同步互斥失败的例子 进程A在读出valid时发现它是1&#xff0c;减1后为0&#xff0c;这时if不成立&#xff1b;但是修改后的值尚未写回内存&#xff1b;假设这时被程序B抢占&#xff0c;程序B读出valid仍为1&#xff0c;减1后为…