登录界面
#include "window.h"
#include<QDebug>
#include<QIcon>
Window::Window(QWidget *parent) //构造函数的定义
: QWidget(parent) //显性调用父类的构造函数
{
//判断数据库对象是否包含了自己使用的数据库Student.db
if(!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");
//窗口icon
this->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("");
}
else
this->close();
}
}
else
{
qDebug()<<"账号错误";
int rex =box2.exec();
if(rex ==QMessageBox::Yes)
{
Window::ed1->setText("");
Window::ed2->setText("");
}
else
this->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(); //获取ip
quint16 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 +": 退出聊天室";
}