基于谷歌模型gemini-pro 的开发的QT 对话项目

支持的功能,新建对话框,目前发现相关梯子不支持访问谷歌的api 的可能代理设置的不对,

 QNetworkAccessManager manager;// Set up your requestQNetworkRequest request;request.setUrl(QUrl("https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key=AIz****n_XRciLfpdkgruY"));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");// Set up your JSON dataQJsonObject textObj1;textObj1["text"] = "写一个故事";QJsonObject userRole1;userRole1["role"] = "user";userRole1["parts"] = QJsonArray() << textObj1;QJsonObject textObj2;textObj2["text"] = "In the bustling city of Meadow brook, lived a young girl named Sophie. She was a bright and curious soul with an imaginative mind.";QJsonObject modelRole;modelRole["role"] = "model";modelRole["parts"] = QJsonArray() << textObj2;QJsonObject textObj3;textObj3["text"] = "你用中文写一个故事?";QJsonObject userRole2;userRole2["role"] = "user";userRole2["parts"] = QJsonArray() << textObj3;QJsonArray contents;contents << userRole1 << modelRole << userRole2;QJsonObject mainObj;mainObj["contents"] = contents;QJsonDocument doc(mainObj);// Send the POST requestQNetworkReply *reply = manager.post(request, doc.toJson());// Create an event loopQEventLoop loop;QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));// Wait until 'finished()' is emittedloop.exec();// Check the replyif (reply->error() == QNetworkReply::NoError) {QString strReply = (QString)reply->readAll();// Parse the JSON responseQJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());QJsonObject jsonObject = jsonResponse.object();QJsonArray candidatesArray = jsonObject["candidates"].toArray();// Assume we only want the first candidateif (!candidatesArray.isEmpty()) {QJsonObject firstCandidate = candidatesArray[0].toObject();QJsonObject contentObject = firstCandidate["content"].toObject();QJsonArray partsArray = contentObject["parts"].toArray();// Assume we only want the text of the first partif (!partsArray.isEmpty()) {QJsonObject firstPart = partsArray[0].toObject();QString text = firstPart["text"].toString();qDebug() << "Extracted text: " << text;}}}else {qDebug() << "Failure" <<reply->errorString();}delete reply;

重点是QT的SSL :根据QT 的版本下载相关的ssl库

void MainWindow::provideContextMenu(const QPoint &pos) {QPoint globalPos = ui->listWidget->mapToGlobal(pos);QMenu menu;QAction *copyAction = menu.addAction("Copy");QAction *selectedItem = menu.exec(globalPos);if (selectedItem == copyAction) {QList<QListWidgetItem *> items = ui->listWidget->selectedItems();QStringList text;foreach(QListWidgetItem *item, items) {text.append(item->text());}QApplication::clipboard()->setText(text.join("\n"));}
}
void MainWindow::initializeChatSaveFile() {// 确保存储目录存在QString storeDirectory = "store";QDir dir(storeDirectory);if (!dir.exists()) {dir.mkpath("."); // 如果不存在,则创建目录}// 获取目录下所有的 txt 文件QStringList chatFiles = dir.entryList(QStringList() << "chat_*.txt", QDir::Files, QDir::Name);if (!chatFiles.isEmpty()) {// 如果至少存在一个文件,则读取第一个文件currentChatFileName = storeDirectory + "/" + chatFiles.first();} else {// 如果不存在任何文件,则创建一个新文件currentChatFileName = storeDirectory + "/chat_1.txt";QFile file(currentChatFileName);file.open(QIODevice::WriteOnly); // 创建新文件file.close();}
}void MainWindow::saveChatAutomatically() {QFile file(currentChatFileName);if (!file.open(QIODevice::Append | QIODevice::Text)) {// 如果文件不能被打开,显示一个错误消息框QMessageBox::information(this, tr("Unable to open file"), file.errorString());return;}QTextStream out(&file);for (int i = 0; i < ui->listWidget->count(); ++i) {QListWidgetItem *item = ui->listWidget->item(i);out << item->text() << "\n"; // 写入每一行文本及一个换行符}file.close(); // 关闭文件
}
void MainWindow::showContextMenu(const QPoint &pos) {QPoint globalPos = ui->listView->mapToGlobal(pos);QMenu menu;QModelIndex index = ui->listView->indexAt(pos);if (index.isValid()) {// 如果点击的是有效项,则显示删除选项QAction *deleteAction = menu.addAction("删除对话");connect(deleteAction, &QAction::triggered, this, &MainWindow::deleteSelectedItem);} else {// 如果点击的是空白区域,则显示新建选项QAction *newAction = menu.addAction("添加新的对话");connect(newAction, &QAction::triggered, this, &MainWindow::createNewFile);}menu.exec(globalPos);
}void MainWindow::deleteSelectedItem() {QModelIndex index = ui->listView->currentIndex();if (index.isValid()) {// 删除模型中的项model->removeRow(index.row());// 可选: 删除对应的文件QString fileName = model->itemFromIndex(index)->text();QFile::remove("store/" + fileName);}
}
void MainWindow::createNewFile() {// 获取下一个文件编号int fileNumber = 1;QString fileName;do {fileName = QString("store/chat_%1.txt").arg(fileNumber++);} while (QFile::exists(fileName));QFile file(fileName);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {// 错误处理,无法创建文件qDebug() << "Unable to create the file:" << fileName;return;}file.close();// 更新当前聊天文件名currentChatFileName = fileName;// 添加新项到ListViewQStandardItem *item = new QStandardItem(QFileInfo(file).fileName());model->appendRow(item);// 选中并滚动到新创建的文件QModelIndex index = model->indexFromItem(item);ui->listView->setCurrentIndex(index);ui->listView->scrollTo(index);// 清空或加载新文件的内容到 QListWidgetloadChatContent(); // 假设这个函数会清空当前内容并加载新文件的内容
}
void MainWindow::onFileDoubleClicked(const QModelIndex &index) {if (!index.isValid()) return;QString fileName = model->itemFromIndex(index)->text();currentChatFileName = "store/" + fileName; // 更新当前聊天文件名loadChatContent(); // 加载对应的聊天内容
}

 完整版本代码,评论区留言邮箱发给你们(免费)

后续也会上传到github 上进行开源

想要获取直接运行版本的也可以直接留言私信我。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

使用 exec*库函数、编程练习动态链接库的两种使用方式

blog_week08 编程使用 exec*库函数加载一个可执行文件&#xff0c;编程练习动态链接库的两种使用方式一、 编程使用 exec*库函数加载一个可执行文件二、 编程练习动态链接库的两种使用方式 编程使用 exec*库函数加载一个可执行文件&#xff0c;编程练习动态链接库的两种使用方式…

git基础概念和常用命令(日常开发收藏备用)

目录 ### 常用命令 ### 远程仓库与克隆 ### 分支管理 ### 子模块&#xff08;Submodule&#xff09; ### 其他高级操作 ### 交互式暂存&#xff08;Interactive Staging&#xff09; ### cherry-pick ### rebase ### reflog与reset ### 子树合并&#xff08;Subtree …

分类模型评估方法

1.数据集划分 1.1 为什么要划分数据集? 思考&#xff1a;我们有以下场景&#xff1a; 将所有的数据都作为训练数据&#xff0c;训练出一个模型直接上线预测 每当得到一个新的数据&#xff0c;则计算新数据到训练数据的距离&#xff0c;预测得到新数据的类别 存在问题&…

vscode软件安装步骤

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址&#xff0c;找到下载界面 链接如下&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑&#xff0c;各位小伙伴自己选择合适的版本&#xff0c;点击下载按钮…

LVS负载均衡配置虚拟引起微服务注册混乱

线上小程序突然报错&#xff0c;查看网关日志&#xff0c;访问下游微服务A时大量报错&#xff1a; 1&#xff09;检查微服务是否未注册。登录eureka页面&#xff0c;发现三个节点均正常注册 三个微服务节点地址分别为&#xff1a;13.9.1.91:8080&#xff0c;13.9.1.92:8080和1…

Chapter 7 - 8. Congestion Management in Ethernet Storage Networks以太网存储网络的拥塞管理

Stomped CRC Counters Stomped CRC counters help in finding the location of bit errors in a network that uses cut-through switches. More precisely, these counters help in finding where bit errors do not exist. Stomped CRC 计数器有助于在使用直通式交换机的网络…

c语言-指针练习题

目录 前言一、题目一二、题目二总结 前言 为了巩固c语言中关于指针知识点的掌握&#xff0c;本篇文章记录关于指针的练习题。 一、题目一 有n个整数&#xff0c;使前面各数顺序往后移动m个位置&#xff0c;最后m个数变成最前面的m个数 写一函数实现以上功能&#xff0c;在主函…

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述&#xff1f; 今天在研究了shiro的新版本shiro1.13.0版本&#xff0c;发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出&#xff0c;在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了&#xff0c;新版本如何使用呢…

适用于 Mac 的 10 款顶级数据恢复软件分享

想要免费从Mac恢复永久删除的文件吗&#xff1f;这篇文章给你答案&#xff01; 在Mac上恢复已永久删除的文件并不难&#xff0c;只需找到合适的工具。今天&#xff0c;我们将为大家评测10款免费的Mac数据恢复软件&#xff0c;让你在拯救Mac数据时无需支付任何费用。这些软件在…

c++简易AI

今天小编一时雅兴大发&#xff0c;做了一个c的简易AI&#xff0c;还是很垃圾的&#xff01; 题外话&#xff08;每期都会有&#xff09;&#xff1a;我的蛋仔名叫酷影kuying&#xff0c;大家能加我好友吗&#xff1f; 上代码咯&#xff01; #include<bits/stdc.h> #in…

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-LearningQ-Learning模型结构损失函数经验回放探索策略流程关联 DQN 优化DDQN&#xff1a;双 DQN&#xff0c;实现无偏估计Dueling DQN&#xff1a;提高…

[Angular] 笔记 23:Renderer2 - ElementRef 的生产版本

chatgpt: Renderer2 简介 在 Angular 中&#xff0c;Renderer2 是一个服务&#xff0c;用于处理 DOM 操作的抽象层。它提供了一种安全的方式来操作 DOM&#xff0c;同时与平台无关&#xff0c;有助于维护应用程序的跨浏览器兼容性和安全性。 Renderer2 的作用是在 Angular 组…

学生数据可视化与分析工具 vue3+flask实现

目录 一、技术栈亮点 二、功能特点 三、应用场景 四、结语 学生数据可视化与分析工具介绍 在当今的教育领域&#xff0c;数据驱动的决策正变得越来越重要。为了满足学校、教师和学生对于数据深度洞察的需求&#xff0c;我们推出了一款基于Vue3和Flask编写的学生数据可视化…

Peter算法小课堂—浮点数危机

大家先想想下面这个代码运行结果&#xff1a; #include <bits/stdc.h> using namespace std; int main(){double x5.2;double y4.11.1;cout<<(x<y)<<endl;cout<<x-y<<endl;return 0; } 最终发现&#xff0c; &#xff1f;&#xff1f;&…

嘉立创免费领券打样--领券流程及地址

领券地址 https://member.jlc.com/复制到浏览器访问该地址 自行注册账号 注册完账号后往下翻,有一个 “优惠券中心” 点免费券领取 领取对应需要的打样券就可以了 一般情况下都是用1-4层专用券,如果上个月有消费的话(超过20)是可以领通用券的,专用权只能是立创eda画的pcb才能…

80多套 Python 数据可视化炫酷大屏模板,全网最新、最多,最全、最酷、最炫大数据可视化模板

80多套数据可视化炫酷大屏模板&#xff1b;包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 项目背景 由于自己公司项目里面用到一个数据可视化大…

centos 7.9 升级系统默认的python2.7到python 2.7.18

centos 7.9 升级系统默认的python2.7到python 2.7.18 备份旧版本 mv /usr/bin/python /usr/bin/python_2.7.5 下载新版本 Download Python | Python.org Python Release Python 2.7.18 | Python.org wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz cd /…

【23.12.30高可用篇】什么是SLA?

什么是SLA&#xff1f; ✔️简述✔️拓展知识✔️4个9、5个9 ✔️简述 SLA是Service Level Agreement的缩写&#xff0c;意为服务等级协议。它是指供应商和客户之间达成的一份正式协议&#xff0c;规定了供应商应该向客户提供的服务水平、质量、可靠性和响应时间等指标。 SLA通…

基于FPGA的数字电路(PWM脉宽调制)

一.PWM的制作原理 假如我们有一个锯齿波&#xff0c;然后在锯齿波上设置一个阈值&#xff08;黑色水平虚线&#xff09;&#xff0c;凡是大于该阈值时输出均为高电平&#xff0c;反之则为低电平&#xff0c;这样我们是不是就得到一个PWM信号呢&#xff1f;如果我们想调整它的占…

flutter打包后的msix安装程序提示:应用安装失败,错误消息: 已阻止程序包 com.flutter.XXXXX 的部署等解决办法

使用dart的依赖msix打包后的程序&#xff0c;提示&#xff1a; 应用安装失败&#xff0c;错误消息: 已阻止程序包 com.flutter.flutterapp_1.0.0.0_x64__fxkeb4dgdm144 的部署&#xff0c;因为提供的程序包具有与已安装的程序包相同的标识&#xff0c;但内容不相同。请提高要安…