前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >100行代码开源翻译小工具

100行代码开源翻译小工具

作者头像
Qt君
发布于 2023-11-26 06:54:52
发布于 2023-11-26 06:54:52
40500
代码可运行
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程
运行总次数:0
代码可运行

  100行代码实现翻译小工具,支持中英互译。程序执行文件就不发布了,有兴趣可以下载源码自己编译运行。

源码地址:https://github.com/aeagean/TranslationAPI

Qt翻译api封装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

#include <QApplication>
#include <QDateTime>
#include <QCryptographicHash>
#include <QPushButton>
#include <QTextEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QJsonArray>
#include "HttpClient.h"

using namespace AeaQt;

static QByteArray createSign(const QByteArray &text, const QByteArray &appid, const QByteArray &key, const QByteArray &salt)
{
    return QCryptographicHash::hash(appid+text+salt+key, QCryptographicHash::Md5).toHex();
}

static QString trans(const QByteArray &text, bool isEn = true)
{
    QString output;
    QByteArray appid = APP_ID; // 修改为你的app-id
    QByteArray key   = APP_KEY; // 修改为你的密钥
    QByteArray salt  = QByteArray::number(QDateTime::currentSecsSinceEpoch());
    QByteArray sign  = createSign(text, appid, key, salt);

    static HttpClient client;
    client.get("http://api.fanyi.baidu.com/api/trans/vip/translate")
          .queryParam("from",  isEn ? "en" : "zh")
          .queryParam("to",    isEn ? "zh" : "en")
          .queryParam("q",     text)
          .queryParam("appid", appid)
          .queryParam("salt",  salt)
          .queryParam("sign",  sign)
          .onSuccess([&](QJsonObject result) {
              qDebug().noquote()<<result;
              auto arr = result.value("trans_result").toArray();
              output = text;
              int index = 0;
              // 转换翻译,可将换行和空格字符一并转换
              for (int i = 0; i < arr.size(); i++) {
                  QString src = arr.at(i).toObject().value("src").toString();
                  QString dst = arr.at(i).toObject().value("dst").toString();
                  index = output.indexOf(src, index);
                  output.replace(index, src.size(), dst);
              }
           })
          .onFailed([](QByteArray error) { qDebug()<<error; })
          .logLevel(HttpRequest::All)
          .block()
          .exec();

    return output;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton *okBtn = new QPushButton("翻译");
    QPushButton *switchBtn = new QPushButton("英->中");
    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(okBtn, 5);
    hLayout->addWidget(switchBtn, 1);

    QTextEdit *textInput = new QTextEdit;
    QTextEdit *textOutput = new QTextEdit;
    textOutput->setReadOnly(true);
    QWidget w;
    w.setWindowTitle("翻译小工具");
    w.resize(320, 240);
    QVBoxLayout *l = new QVBoxLayout;
    l->addWidget(textInput, 2);
    l->addLayout(hLayout, 1);
    l->addWidget(textOutput, 2);
    w.setLayout(l);
    w.show();

    QObject::connect(okBtn, &QPushButton::clicked, okBtn, [&](){
        qDebug().noquote() << textInput->toPlainText().toUtf8();
        QString result = trans(textInput->toPlainText().toUtf8(), switchBtn->text() == "英->中" ? true : false);
        textOutput->setPlainText(result);
    });

    QObject::connect(switchBtn, &QPushButton::clicked, switchBtn, [&](){
        if (switchBtn->text() == "中->英") {
            switchBtn->setText("英->中");
        }
        else {
            switchBtn->setText("中->英");
        }
    });

    return a.exec();
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++】Qt:WebSocket客户端示例
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,允许在客户端和服务器之间实时交换数据。WebSocket 客户端是指使用 WebSocket 协议与服务器端建立连接并进行数据交换的程序或组件。
DevFrank
2024/07/24
9290
【C++】Qt:WebSocket客户端示例
Python GUI开发- PyQt5 开发小工具环境入门
常见的python开发gui的库有 Tkinter, PyQt5, wxPython等。本教程是选择PyQt5 开发桌面小工具。
上海-悠悠
2024/04/25
3820
Python GUI开发- PyQt5 开发小工具环境入门
python实现py打包exe小工具
写的python代码,有时候需要进行打包操作,但是又不记得打包指令,为此捣鼓一个打包的小工具,方便快速打包py文件(小工具还可以继续优化,比如加密、反编译等)。需要的小伙伴可以自行下载尝试。
用户6367961
2021/10/18
1.2K0
python实现py打包exe小工具
PyQt 截图小工具
时不时要截个屏,圈画重点,再复制给同事或存档,工作效率却总被琐碎的操作拉低。偶然的一次灵感:何不自己动手,做一个 “一键框选截图 + 涂鸦标注 + 复制/保存” 的小工具?这样既能练练 PyQt 的功力,又能打造一个真正好用的小利器。
繁依Fanyi
2025/05/04
1370
06 json数据解析和列表控件
功能:将QJsonDocment转换 成QByteArray,以便将数据写入到json文件中
天天Lotay
2023/10/15
4020
06 json数据解析和列表控件
Qt信号记录器
  QSignalSpy可以连接到任何对象的任何信号并记录其发射信息。QSignalSpy本身是一个QVariant列表的列表QList<QList<QVariant> >。信号的每次发射都将向列表中追加一个项,其中包含信号的参数列表。
Qt君
2020/05/08
9860
Qt 学习记录
[],标识一个 Lambda 的开始,这部分必须存在,不能省略。外部变量访问方式说明符只能使用定义 Lambda 为止时 Lambda 所在作用范围内可见的局部变量(包括 Lambda 所在类的 this)。外部变量访问方式说明符有以下形式:
小简
2023/01/04
7.4K0
Qt 学习记录
Qt实现FTP的上传和下载
本来想简单抄抄书,随便手写个Ftp客户端的,结果发现教材上的是基于Qt4的QFtp类库,而在Qt5中取消了这一个类库(同时也取消了QHttp等的类),取而代之的是QNetworkAccessManager 这个类,把这些杂货全都揽下来了,据说是因为之前的两个类有重复而且效率有问题balabala。于是就百度了一下,发现百度上要么讲的不全,要么就是要去下一个由热心网民重新封装的QFtp类。显然我并不喜欢无脑复制粘贴,想好好看下Qt官方提供的东西的用法,深入的理解下Qt网络编程,于是就果断自行google(话说google真好用),加上查看帮助文档,终于把一个简版的Ftp客户端大概框架弄清楚了。
mythsman
2022/11/14
1.3K0
Qt实现FTP的上传和下载
Qt | TCP客户端简单实现+TCP助手测试
Qt历险记
2024/12/02
4490
Qt | TCP客户端简单实现+TCP助手测试
QTcpSocket – client[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195503.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/30
5320
QTcpSocket – client[通俗易懂]
QT实现登录界面(利用MySQL保存数据和邮箱辅助注册)
       断断续续黑框框下的学生管理系统,也写了不下三次,总在黑框框下呆着也不是一回事,想挑战用qt做一个界面版的学生管理系统,至于为什么选用qt+C++,而不用C#之类的,是因为我目前学习C++,手头只接触了qt,所以想着挑战一下自己。从他人博客获取知识,为我所用,最后再输出到博客,供他人学习,这种感觉真的很棒。这几篇文章重在出效果,大牛勿喷,边学边做边发博,文中的代码可能不完整,我是拿出单个功能来说的,或许会出现错误,不用着急啦,需要用到的资源以及代码,我都会打包上传,如有需要的,可自行下载。
花狗Fdog
2020/10/28
6.6K0
QT实现登录界面(利用MySQL保存数据和邮箱辅助注册)
QT学习---------6
拓展 1.信号可以连接信号 2.一个信号可以连接多个槽 3.多个信号可以连接同一个槽函数 4.信号和槽的参数必须类型一一对应 5.信号的参数个数可以多于槽函数,但类型也要对应 6.断开信号 disconnect(tt,tsignal2,st,ssignal2);
大忽悠爱学习
2021/02/22
2550
QT入门学习——从信号和槽到对话框,各种控件以及自定义控件
2.4默认创建有窗口类,yWidget,基类有三种选择:QWidget、QMainWindowQDialog
Arya
2024/10/31
7040
QT入门学习——从信号和槽到对话框,各种控件以及自定义控件
【QT】文件系统相关 -- QFile
🔥 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于⽂件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件制或重命名等
IsLand1314
2025/03/15
1790
【QT】文件系统相关 -- QFile
【QT】系统事件入门 -- 文件 QFile基础和示例
🔥 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于⽂件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件制或重命名等
IsLand1314
2025/03/21
1920
【QT】系统事件入门 -- 文件 QFile基础和示例
分词工具集成
本部分记录如何利用Python进行分词工具集成,集成工具可以实现运行无环境要求,同时也更方便。 成品展示 大家要是想体验的话,就下载了试试吧,有点大,主要是pyqt5太大了,好几百兆… 用的是天翼
MinChess
2022/12/26
9730
分词工具集成
【QT】Qt 网络
在进行网络编程之前,需要在项目中的 .pro 文件中添加 network 模块。添加之后要手动编译⼀下项目,使 Qt Creator 能够加载对应模块的头文件。
YoungMLet
2024/08/13
3720
【QT】Qt 网络
【QT】qt 文件操作
文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。
YoungMLet
2024/07/30
3130
【QT】qt 文件操作
qt中Qtcpserver服务端_qt websocket
TCP 协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
全栈程序员站长
2022/09/30
1.4K0
qt中Qtcpserver服务端_qt websocket
【Qt】QSS
上述代码的含义表示,针对界⾯上所有的 QPushButton , 都把⽂本颜⾊设置为红色。
YoungMLet
2024/08/15
2811
【Qt】QSS
相关推荐
【C++】Qt:WebSocket客户端示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验