项目配置:
在.pro文件中添加网络模块:
QT += core network
API配置:
-
将apiUrl替换为实际的DeepSeek API端点
-
将apiKey替换为你的有效API密钥
-
根据API文档调整请求参数(模型名称、温度值等)
功能说明:
-
使用QNetworkAccessManager处理HTTP请求
-
自动处理JSON序列化/反序列化
-
支持异步请求处理
-
包含基本的错误处理
扩展建议:
-
添加更完善的错误处理(HTTP状态码检查)
-
实现异步回调机制
-
添加请求超时处理
-
支持流式响应(如果API支持)
-
使用环境变量或配置文件管理API密钥
典型输出处理:
// 在handleResponse函数中可添加以下处理逻辑:
if (!content.isEmpty()) {
qDebug() << "Received response:";
qDebug().noquote() << content; // 保留原始格式
} else {
qDebug() << "No content in response";
}
代码举例:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>class ApiClient : public QObject {Q_OBJECT
public:explicit ApiClient(QObject *parent = nullptr) : QObject(parent) {manager = new QNetworkAccessManager(this);connect(manager, &QNetworkAccessManager::finished, this, &ApiClient::handleResponse);}void sendRequest(const QString &prompt) {// API配置const QString apiUrl = "https://api.deepseek.com/v1/chat/completions";const QString apiKey = "your_api_key_here"; // 请替换为实际API密钥// 创建请求QNetworkRequest request;request.setUrl(QUrl(apiUrl));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");request.setRawHeader("Authorization", QString("Bearer %1").arg(apiKey).toUtf8());// 构建JSON请求体QJsonObject requestBody;requestBody["model"] = "deepseek-chat"; // 根据实际模型名称修改requestBody["temperature"] = 0.7;requestBody["max_tokens"] = 1000;QJsonArray messages;QJsonObject systemMsg;systemMsg["role"] = "system";systemMsg["content"] = "You are a helpful assistant.";messages.append(systemMsg);QJsonObject userMsg;userMsg["role"] = "user";userMsg["content"] = prompt;messages.append(userMsg);requestBody["messages"] = messages;// 发送POST请求manager->post(request, QJsonDocument(requestBody).toJson());}private slots:void handleResponse(QNetworkReply *reply) {if (reply->error()) {qDebug() << "Error:" << reply->errorString();reply->deleteLater();return;}// 解析响应QJsonDocument response = QJsonDocument::fromJson(reply->readAll());QJsonObject jsonResponse = response.object();if (jsonResponse.contains("choices")) {QJsonArray choices = jsonResponse["choices"].toArray();if (!choices.isEmpty()) {QJsonObject choice = choices.first().toObject();QJsonObject message = choice["message"].toObject();QString content = message["content"].toString();qDebug() << "API Response:" << content;}} else {qDebug() << "Error response:" << response.toJson();}reply->deleteLater();}private:QNetworkAccessManager *manager;
};// 使用示例
int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);ApiClient client;client.sendRequest("Explain quantum computing in simple terms");return a.exec();
}#include "main.moc"