Vc - Qt - 仿微信聊天工具

 从小白开始,成神成魔之路记录,评论区:记录生活,一年成神,评论区自己可用其他人不可用


2021/11/13 8:49 仿照微信项目-服务器端,查找某个玩家的结果记录: 


2021/11/14 21:37 仿照微信服务器端 - 实现根据username指定子串模糊查询相关玩家,记录如下:

服务器的数据库中的数据:

 


2021/11/16 0:14:41

优化了点击按钮后的显示效果,添加朋友的审核信息放入主对话框中

向好友验证列表中添加一项 


2021/12/1 23:35 记录错误,本来是将数据这样保存:QPixmap -> QByteArray -> QString,但是仔细观察在byteArr[8]="\0",所以数据从QByteArray到QString将会发生数据的截断现象,那么就不能将QByteArray -> QString ,所以这种保存图像方式是不对的


 2021/12/5 19:54 本周的任务完成,基本优化及基本功能完成,主要是加载头像完成等


 2021/12/7 8:23 一段时间的优化成果


2021/12/7 22:59 生成带三角的窗口,效果如下:

 详细请参考博客:

Qt如何绘制带小三角的消息框_前行之路还需前行-CSDN博客https://blog.csdn.net/GoForwardToStep/article/details/80056236?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163888853516780261968658%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163888853516780261968658&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-80056236.first_rank_v2_pc_rank_v29&utm_term=qt%E5%A6%82%E4%BD%95%E5%81%9A%E5%87%BA%E5%B0%96%E8%A7%92%E7%AA%97%E5%8F%A3&spm=1018.2226.3001.4187


2021/12/10 0:38 完成表情窗口的初步显示 


2021/12/12 10:19 昨天完成基本的截图功能了,关于QQ文件发送样式(仅仅是截图还未实现功能 )


 2021/12/13 11:37 Qt仿照微信项目,完成基本的文件传输功能,但是是有bug的,完成的效果如图:


2021/12/19 1:44  在创建群聊的界面加载所有好友信息基本完成,正式转入群聊开发功能


2021/12/24 0:37  左侧增加群聊列表


2021/12/28 0:39  获取群聊列表基本完成:群聊列表现在主要包含两个字段groupid,groupname,相应的图片展示如下:


2022/4/15 最新效果展示:群聊中群好友显示功能基本完善

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 95
    评论
首先,你需要准备好QT Creator开发环境和微信开放平台的注册信息。 下面是一个简单的实现微信登录页面的示例代码: ``` #include "mainwindow.h" #include "ui_mainwindow.h" #include <QNetworkRequest> #include <QNetworkReply> #include <QUrlQuery> #include <QJsonDocument> #include <QJsonObject> #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // 设置登录页面的背景图片 QPixmap pixmap(":/images/background.jpg"); ui->backgroundLabel->setPixmap(pixmap); // 点击登录按钮后触发的事件 connect(ui->loginButton, &QPushButton::clicked, this, &MainWindow::onLoginButtonClicked); } MainWindow::~MainWindow() { delete ui; } void MainWindow::onLoginButtonClicked() { // 构造请求URL QString appId = "你的AppID"; QString redirectUri = "http://www.example.com/"; QString scope = "snsapi_login"; QString state = "wechat_login"; QString url = QString("https://open.weixin.qq.com/connect/qrconnect?" "appid=%1&" "redirect_uri=%2&" "response_type=code&" "scope=%3&" "state=%4#wechat_redirect") .arg(appId) .arg(redirectUri) .arg(scope) .arg(state); // 打开浏览器窗口,让用户扫描二维码登录 QDesktopServices::openUrl(QUrl(url)); } void MainWindow::onUrlChanged(const QUrl &url) { // 提取URL中的code参数 QString code; if (url.toString().contains("code=")) { code = QUrlQuery(url).queryItemValue("code"); } if (!code.isEmpty()) { // 构造获取access_token的请求 QString appId = "你的AppID"; QString appSecret = "你的AppSecret"; QString url = QString("https://api.weixin.qq.com/sns/oauth2/access_token?" "appid=%1&" "secret=%2&" "code=%3&" "grant_type=authorization_code") .arg(appId) .arg(appSecret) .arg(code); // 发送获取access_token的请求 QNetworkAccessManager *manager = new QNetworkAccessManager(this); connect(manager, &QNetworkAccessManager::finished, this, &MainWindow::onAccessTokenReplyFinished); QNetworkRequest request(QUrl(url)); manager->get(request); } } void MainWindow::onAccessTokenReplyFinished(QNetworkReply *reply) { // 解析获取access_token的响应 QByteArray data = reply->readAll(); QJsonDocument doc = QJsonDocument::fromJson(data); QJsonObject obj = doc.object(); if (obj.contains("errcode")) { // 获取access_token失败 int errcode = obj.value("errcode").toInt(); QString errmsg = obj.value("errmsg").toString(); QMessageBox::critical(this, "Error", QString("获取access_token失败: %1(%2)").arg(errmsg).arg(errcode)); } else { // 获取access_token成功 QString accessToken = obj.value("access_token").toString(); QString openId = obj.value("openid").toString(); // TODO: 进行下一步操作,例如获取用户信息并登录 } } ``` 在MainWindow类的构造函数中,我们设置了登录页面的背景图片,并连接了登录按钮的clicked信号到onLoginButtonClicked槽函数上。 在onLoginButtonClicked槽函数中,我们构造了获取二维码URL,并打开了浏览器窗口,让用户扫描二维码登录。 在MainWindow类中,我们还定义了onUrlChanged和onAccessTokenReplyFinished两个槽函数。onUrlChanged槽函数会在浏览器窗口的URL发生变化时被调用,我们可以在这里提取出URL中的code参数。onAccessTokenReplyFinished槽函数会在获取access_token的请求完成后被调用,我们可以在这里解析获取access_token的响应,并进行下一步操作,例如获取用户信息并登录。 当用户在浏览器窗口中扫描完二维码后,会被重定向到我们在微信开放平台上注册的回调URL(即上面代码中的redirectUri参数)。在这里,我们可以通过QDesktopServices::openUrl打开一个隐藏的浏览器窗口,以便获取URL的变化。当浏览器窗口的URL发生变化时,会触发onUrlChanged槽函数。在这里,我们可以提取URL中的code参数,并发送获取access_token的请求。获取access_token的请求完成后,会触发onAccessTokenReplyFinished槽函数。在这里,我们可以解析获取access_token的响应,并进行下一步操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 95
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫忘输赢

莫忘输赢 - 收钱袋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值