当前位置: 首页 > news >正文

Qt接入deepseekv3 API 提供openssl 1.1.1g安装包

1.获取api (有免费10元额度)

DeepSeek

记得复制api,避免丢失频繁创建。

2.qt调用https请求

配置网络模块

QT += core gui widgets network

直接上代码

拿到代码替换api,和修正qt组件输入和输出即可。

#ifndef DEEPSEEKCLIENT_H
#define DEEPSEEKCLIENT_H

#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include<QJsonArray>
#include <QSslSocket>

namespace Ui {
class DeepSeekClient;
}

class DeepSeekClient : public QWidget
{
    Q_OBJECT

public:
    explicit DeepSeekClient(QWidget *parent = nullptr);
    ~DeepSeekClient();
    void sendRequest(const QString &prompt);


    void handleResponse(QNetworkReply *reply);

signals:
    void responseReceived(const QString &response);

private slots:
    void on_pushButton_clicked();

private:
    QNetworkAccessManager *manager;
    QString api_key = "sk-xxxx"; // 替换为你的API Key
private:
    Ui::DeepSeekClient *ui;
};

#endif // DEEPSEEKCLIENT_H
#include "deepseekclient.h"
#include "ui_deepseekclient.h"
#include <QDebug>
#include"log/easylogging++.h"

DeepSeekClient::DeepSeekClient(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DeepSeekClient)
{
    ui->setupUi(this);
    manager = new QNetworkAccessManager(this);
    
    // 设置样式表
    QString styleSheet = R"(
        QWidget {
            background-color: #f5f5f5;
            font-family: "Microsoft YaHei", Arial;
        }
        QTextEdit {
            background-color: white;
            border: 1px solid #ddd;
            border-radius: 8px;
            padding: 8px;
            font-size: 14px;
        }
        QLineEdit {
            background-color: white;
            border: 1px solid #ddd;
            border-radius: 8px;
            padding: 4px 12px;
            font-size: 14px;
        }
        QLineEdit:focus {
            border: 1px solid #4a90e2;
        }
        QPushButton {
            background-color: #4a90e2;
            color: white;
            border: none;
            border-radius: 8px;
            font-size: 14px;
            font-weight: bold;
        }
        QPushButton:hover {
            background-color: #357abd;
        }
        QPushButton:pressed {
            background-color: #2a5f96;
        }
    )";
    this->setStyleSheet(styleSheet);

    // 检查SSL支持
    qDebug() << "SSL Support:" << QSslSocket::supportsSsl();
    qDebug() << "Build Version:" << QSslSocket::sslLibraryBuildVersionString();
    qDebug() << "Runtime Version:" << QSslSocket::sslLibraryVersionString();

    qDebug() << manager->supportedSchemes();
}

DeepSeekClient::~DeepSeekClient()
{
    delete ui;
}

///
/// dpseek发送数据
/// \param prompt
///
void DeepSeekClient::sendRequest(const QString &prompt) {

    // 显示思考状态
    QString userInput = ui->dpseek_input_edit->text();
    ui->dpseek_output_edit->append(QString("<div style='margin: 8px 0;'><b style='color: #4a90e2;'>您:</b> %1</div>").arg(userInput));
    ui->dpseek_output_edit->append(QString("<div style='margin: 8px 0; color: #666;'><i>AI正在思考中,请稍候...</i></div>"));
    
    // 禁用输入和发送按钮
    ui->dpseek_input_edit->setEnabled(false);
    ui->pushButton->setEnabled(false);

    QUrl url("https://api.deepseek.com/chat/completions");
    QNetworkRequest request(url);

    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
    request.setRawHeader("Authorization", ("Bearer " + api_key).toUtf8());

    QJsonObject body;
    body["model"] = "deepseek-chat";
    body["messages"] = QJsonArray{QJsonObject{{"role", "user"}, {"content", prompt}}};

    QNetworkReply *reply = manager->post(request, QJsonDocument(body).toJson());

    // 处理SSL错误
    connect(reply, &QNetworkReply::sslErrors, this, [reply]() {
        qDebug() << "SSL Errors occurred!";
        reply->ignoreSslErrors(); // 测试阶段忽略错误
    });

    connect(reply, &QNetworkReply::finished, [=]() {
        handleResponse(reply);
        reply->deleteLater();
    });
}
///
/// 接收数据,回调处理
/// \param reply
///
void  DeepSeekClient::handleResponse(QNetworkReply *reply) {
     // 重新启用输入和发送按钮
    ui->dpseek_input_edit->setEnabled(true);
    ui->pushButton->setEnabled(true);
    
    if (reply->error() == QNetworkReply::NoError) {
        QByteArray response = reply->readAll();
        QJsonDocument doc = QJsonDocument::fromJson(response);
        QJsonObject json = doc.object();

        if (json.contains("choices")) {
            QString result = json["choices"].toArray()[0]
                .toObject()["message"].toObject()["content"].toString();
            
            // 删除"正在思考"的提示
            QTextCursor cursor = ui->dpseek_output_edit->textCursor();
            cursor.movePosition(QTextCursor::End);
            cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::KeepAnchor);
            cursor.removeSelectedText();
            cursor.deletePreviousChar(); // 删除多余的换行
            
            // 显示AI回复
            ui->dpseek_output_edit->append(QString("<div style='margin: 8px 0; background-color: #f8f9fa; padding: 8px; border-radius: 4px;'><b style='color: #28a745;'>AI:</b> %1</div>").arg(result));
            
            // 清空输入框
            ui->dpseek_input_edit->clear();
            
            emit responseReceived(result);
        }
    } else {
        // 删除"正在思考"的提示
        QTextCursor cursor = ui->dpseek_output_edit->textCursor();
        cursor.movePosition(QTextCursor::End);
        cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::KeepAnchor);
        cursor.removeSelectedText();
        cursor.deletePreviousChar(); // 删除多余的换行
        
        QString errorMessage = QString("<div style='color: #dc3545; margin: 8px 0;'><b>错误:</b> %1</div>").arg(reply->errorString());
        ui->dpseek_output_edit->append(errorMessage);
    }
}
void DeepSeekClient::on_pushButton_clicked()
{
    LOG(INFO)<<"INPUT: "<<ui->dpseek_input_edit->text().toStdString();
    sendRequest(ui->dpseek_input_edit->text());
}

3.测试

把qt的界面组件输入输出替换即可

坑点!!

ssl1.1.1g报错处理,主要就是openssl版本兼容性问题导致,必须使用一致的dll版本。导致ssl不支持

官网还找不到了openssl 1.1.1g的安装包。

这里我提供安装包

通过网盘分享的文件:OpenSSL 1.1.1g-所需dll动态库文件.zip
链接: https://pan.baidu.com/s/16m5mmyd6J2LTeIIwRdDp1w 提取码: u3s7 
--来自百度网盘超级会员v6的分享

把dll文件放到目录的build后面即可 

学习资料分享

0voice · GitHub

相关文章:

  • 【matlab】大小键盘对应的Kbname
  • 新产品来袭~适用于新能源电力的霍尔传感器
  • 简述deepseek创始人的创业之路
  • 第三次作业
  • 【详细指南】如何在银河麒麟操作系统上使用DeepSeek?
  • flutter 打包mac应用并安装过程
  • 42.水果销售系统(springbootvue的Java项目[含微信小程序])
  • LabVIEW外腔二极管激光器稳频实验
  • 基于SpringBoot的电影院售票管理系统
  • nextjs的基础了解
  • 【C/C++算法】从浅到深学习--- 二分查找(图文兼备 + 源码详解)
  • 第十一篇:EMC的“电磁护盾”——三电系统干扰抑制实战
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十四节】
  • 庞氏骗局(Ponzi Scheme):金融投资与公司经营中的隐形陷阱(中英双语)
  • 恒创科技:如何重新启动 Windows 服务器
  • Windows电脑笔记软件多 推荐几款好用的笔记工具
  • Android图片加载框架Coil,Kotlin
  • 企业的文档安全怎么防护?
  • 无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架
  • uniapp在地图上加载CAD图,标记区域网格,加载geojson数据
  • 深圳信科网站建设/网站seo基本流程
  • 有网站怎么做seo推广/百度入口网站
  • 网站建设应该注意什么/如何优化关键词搜索
  • 用cms做单页网站怎么做/佛山seo优化
  • 腾讯地图北斗导航下载/广州网站优化多少钱
  • 潍坊网站建设方案书/深圳企业网站制作