登录界面
- #include "window.h"
- #include
- #include
- 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 +": 退出聊天室";
-
- }