Qt:一个能远程和别人聊天的高仿QQ程序,无需建立通信

本文档介绍了一个使用Qt框架开发的高仿QQ聊天程序,通过连接数据库实现远程聊天功能,无需额外的通信建立。登录、聊天界面设计详细,功能包括账号注册、好友列表、聊天记录显示等。实现原理主要依赖于对数据库的操作,如MySQL或ODBC连接。目前程序存在的问题是打包后无法加载数据库,作者计划解决此问题。
摘要由CSDN通过智能技术生成

Qt:一个能远程和别人聊天的高仿QQ程序,无需建立通信


动动小手,连接数据库就能完成,看似很难,实则也有点繁琐,哈哈哈哈哈。

一、登录界面

登录界面

二、聊天界面

聊天界面

三、功能描述

  1. 首先可以注册账号;
  2. 可以登录不同的账号,记录当前登录的用户是谁;
  3. 双击左边好友列表即可与好友聊天;
  4. 在好友列表里可查看当前好友是否在线;
  5. 当点击好友时,可自动列出与该好友的聊天记录;
  6. 最主要时是,可以远程聊天;

四、实现原理

  1. 看着买的阿里服务器,没什么用处,所以就想着用数据库来弄点有意思的作品,其实整个实现过程就是对数据库的操作,登录啊、聊天都是从数据库拿数据,然后实时读取数据库信息,谁发给谁,做好细节,总体来说还是蛮有趣的。
  2. 接下来读者可以看一下实现的过程。

五、实现过程

  1. 连接数据库
    有两种方法可以连接数据库

第一种为:MySQL
找了好久终于解决了,就是下载对应的数据库驱动就可以了,我使用的数据库版本为5.7的,知道你们懒得找,所以把下载好的驱动可以在百度网盘自行下载,5M左右。

百度网盘连接:https://pan.baidu.com/s/1llS64YSm5TcVNEiJlqFiSg
密码:ogej

之后就是把下载好的驱动放到两个文件夹中
在这里插入图片描述
在这里插入图片描述
到这里就可以去运行查看效果了
以下是连接数据库代码,可直接在main函数里测试:

//加几个头文件
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
//可直接在main函数里测试
void loadMySqlDriver() {
    qDebug() << QSqlDatabase::drivers();
    db.setHostName("服务器ip地址");
    db.setPort(3306);
    db.setDatabaseName("qq");  //数据库名字
    db.setUserName("root");    //数据库用户名
    db.setPassword("123456");  //数据库密码
    db.open();
    if(!db.open())
    {
        qDebug()<<"不能连接"<<"connect to mysql error"<<db.lastError().text();
        return ;
    }
    else
    {
        qDebug()<<"连接成功"<<"connect to mysql OK";
    }
}

在这里插入图片描述
第二种为:OBDC
如果你电脑就装有mysql数据库的话,那么运行mysql自带的应用程序进行查看以及安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装完之后,用小娜搜索ODBC,选择对应的位数进行打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接数据库代码:

void MainWindow::MySQL_Connect()
{
	//可以把这句定义成全局变量,在其他窗口调用就声明为外部定义就可访问到了
	QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
	db.setHostName("服务器IP地址");
	db.setPort(3306);
	db.setUserName("服务器数据库的用户名");
	db.setPassword("服务器数据库的密码");
	db.setDatabaseName("刚才第一个选项的名字");
	if ( !db.open()){
	    QMessageBox::information(this, "infor", "open failed");
	}
	else
		qDebug()<<"连接成功";
}
  1. 登录功能
    数据库查询:
void MainWindow::MySQL_Search()
{
	//可以把这句定义成全局变量,在其他窗口调用就声明为外部定义就可访问到了
	QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
	QSqlQuery result = db.exec(" select * from user");
    //ODBC查询数据,可自己判断一下返回值是否为真,为真则查询到了,否则没有查询到
    while(result.next()){
		//打印查询到的数据
        qDebug()<<result.value("user_name");
        qDebug()<<result.value("user_password");
    }
}

我自己的代码:

void MainWindow::MySQL_Search()
{
    QSqlQuery result = db.exec(" select * from user");
    //ODBC查询数据
    bool ret = false;
    if((ui->username_edit->text() != QString("")) && (ui->password_edit->text() != QString("")))
    {
        while(result.next()){
            if((ui->username_edit->text() == result.value("user_name")) && (ui->password_edit->text() == result.value("user_password")) ){
                Now_Sign_User = ui->username_edit->text();
                chatwindow->show();
                this->hide();
                ret = true;
                break;
            }
        }
        if(!ret)
        {
            QMessageBox::information(this, "提示", "用户名或密码错误!");
        }
    }
    else
    {
        QMessageBox::information(this, "提示", "用户名或密码不能为空!");
    }
}
  1. 聊天实现
void ChatWindow::List_Chat_Data()
{
    ui->recive_textEdit->clear();
    //QSqlQuery result = db.exec("select * from data_chat order by data_id desc");//降序
    QSqlQuery result = db.exec("select * from data_chat order by data_id asc");//升序
    while(result.next()){
    	//如果查询到的数据是当前用户发给聊天用户的数据就用一种字体颜色追加到聊天窗口
        if((Now_Sign_User == result.value("data_form_user").toString()) && (ui->chat_name->text() == result.value("data_to_user").toString()))
        {
            //组包字符串
            QString insert_data = result.value("data_form_user").toString() + "->" + result.value("data_to_user").toString() + " " + result.value("data_time").toString();
            QString insert_chat_data =result.value("data_chat").toString();
            ui->recive_textEdit->append(insert_data);
            ui->recive_textEdit->append("<font color=\"#0000FF\">"+insert_chat_data+"</font> "); //设置字体颜色
            ui->recive_textEdit->append(" ");
        }
        //如果查询到的数据是当前用户收到聊天用户的数据就用一种字体颜色追加到聊天窗口
        else if((Now_Sign_User == result.value("data_to_user").toString()) && (ui->chat_name->text() == result.value("data_form_user").toString()))
        {
            //组包字符串
            QString insert_data = result.value("data_form_user").toString() + "->" + result.value("data_to_user").toString() + " " + result.value("data_time").toString();
            QString insert_chat_data =result.value("data_chat").toString();
            ui->recive_textEdit->append(insert_data);
            ui->recive_textEdit->append("<font color=\"#00FFFF\">"+insert_chat_data+"</font> "); //设置字体颜色
            ui->recive_textEdit->append(" ");
        }
    }
}
  1. 最后就是打包,测试了
    当我兴高采烈的打包完成,去开心的测试时,出现了问题,打包之后的程序无法加载数据库,这就难办了,如果是发给电脑装有Qt、配置了环境变量、mysql数据库也装了,这几个条件都成立的情况下,程序是可以连接数据库的,但是如果其他电脑这些都没有,那么就需要添加驱动了,找了许多解决办法,发现还是不行,太难了。
  2. 等解决了这个最主要的问题之后再发方法上来吧!!!

六、需要完善的地方

  1. 谁都可以注册,需要注册时,添加一个注册码,就在数据库添加一个属性就行,注册码正确则给你注册。所以现在我把注册功能注释掉了。
  2. 好友在线功能,给用户表再添加一个属性,设置一个标志位,当点击登录时,把标志位变成1,之后就是在好友列表后,加载一个图标即可,当程序退出时,把标志位清0就能完成下线的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值