返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于QT设计一个春联自动生成器
  • 371
分享到

基于QT设计一个春联自动生成器

2024-04-02 19:04:59 371人浏览 安东尼
摘要

目录1. 前言2. 实现原理3. 示例代码3.1 获取春联接口3.2 数据解析代码3.3 token数据存储1. 前言 春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在

1. 前言

春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在春节前夕,会用大红纸张,加上浓墨书写祝福词语,在春节当天贴于门框两边,寓意着一年吉祥如意,还会将福字倒转贴于门上,有"福到临门"的意思。为了方便找到合适的春联句子,我这里就采用现成的自然语言处理接口实现了一个自动生成春联的软件,输入提示词就可以完成春联的生成,方便写春联时参考。

下面是实现的效果:

小时候最期盼的日子就是过年,可以穿新衣服,吃平时吃不到的好吃的,吃完年夜饭一起看春晚,放鞭炮;现在生活水平逐渐提高,平时穿的吃的也不差,也没有很期待了,现在过年吃完饭大家都是盯着手机玩,感觉没有以前小时候那种感觉了。

2. 实现原理

软件是采用Qt框架设计,调用百度大脑的智能春联接口完成春联生成。

官网地址: https://ai.baidu.com/tech/NLP_apply

Http请求方法: POST

请求地址:  https://aip.baidubce.com/rpc/2.0/creation/v1/couplets

URL的参数:access_token 通过api Key和Secret Key获取的access_token

请求头Header:Content-Type  application/JSON

请求参数

text    春联主题的提示字符

index   春联的索引. 默认是0,同一个提示符,多次获取时,这个索引+1就能访问后面的春联.​

返回参数解释

first   春联上联:成7-9个字的上联

second  春联下联:生成7-9个字的春联下联

center  春联横批:生成4个字的春联横批

请求示例:

{ 
"text": "新水",
"index": 0
}

返回的数据示例:

{   
    "couplets" : {
       "first":  "新春新水千山绿",
       "second": "春色春风万户红",
       "center": "喜迎新春"
    }
}

3. 示例代码

下面列出主要的核心代码,可以直接贴到自己工程里就可以使用。

3.1 获取春联接口

//获取春联
void Widget::get_CoupletText(QString terms,int index)
{
    function_select=1;
    QString requestUrl;
    QNetworkRequest request;
​
    //存放图片BASE64编码
    QString imgData;
​
    //打包请求参数赋值
    QjsonObject post_data;
    QJsonDocument document;
​
    //设置请求地址
    QUrl url;
    QByteArray post_param;
​
    //请求地址
    requestUrl = "https://aip.baidubce.com/rpc/2.0/creation/v1/couplets";
​
    //设置数据提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
​
    //设置请求参数:
    post_data.insert("text",terms); //字符串(限5字符数以内)即春联的主题
    post_data.insert("index",index);  //int 整数 默认为数值为0,即第一幅春联。每换一次,数值加1即可,一定数量后会返回之前的春联结果。
​
    //构造请求
    url.setUrl(requestUrl + "?access_token=" + Token);
    request.setUrl(url);
​
    document.setObject(post_data);
    post_param = document.toJson(QJsonDocument::Compact);
​
    //发送请求
    manager->post(request, post_param);
}

3.2 数据解析代码

//解析反馈结果
void Widget::replyFinished(QNetworkReply *reply)
{
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
​
    //读取所有数据
    QByteArray replyData = reply->readAll();
​
    qDebug()<<"状态码:"<<statusCode;
    qDebug()<<"反馈的数据:"<<QString(replyData);
​
    //判断状态码
    if(200 != statusCode)
    {
        return;
    }
​
    
    if(function_select==1) //春联生成
    {
        //解析数据
        QJsonParseError json_error;
        QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);
        if(json_error.error == QJsonParseError::NoError)
        {
            //判断是否是对象,然后开始解析数据
            if(document.isObject())
            {
                QJsonObject obj = document.object();
                //解析错误代码
                if(obj.contains("error_code"))
                {
                    int error_code=obj.take("error_code").toInt();
                    switch (error_code)
                    {
                    case 0: //成功
                        break;
                    case 110:
                    case 111:
                        QMessageBox::infORMation(this,"提示","正在更新密匙.确定后重试.",
                        QMessageBox::Ok,QMessageBox::Ok);
​
                        //更新密匙
                        QTimer::singleShot(200, this, SLOT(updateCaption()));
                        return;
​
                    default:
                        if(obj.contains("error_msg"))
                        {
                            QString text=obj.take("error_msg").toString();
                            QMessageBox::information(this,"提示",text,
                            QMessageBox::Ok,QMessageBox::Ok);
                            return;
                        }
                    }
                }
                else if(obj.contains("couplets"))
                {
                    QJsonObject obj2=obj.take("couplets").toObject();
​
                    QString center; //横批
                    QString first;  //上联-第一
                    QString second; //下联第二
​
                    if(obj2.contains("center"))
                    {
                        center=obj2.take("center").toString();
                    }
                    if(obj2.contains("first"))
                    {
                        first=obj2.take("first").toString();
                    }
                    if(obj2.contains("second"))
                    {
                        second=obj2.take("second").toString();
                    }
​
                    ui->label_0->setText(center);
​
                    QString first_1="\n";
                    for(int i=0;i<first.size();i++)
                    {
                        first_1+=first.at(i);
                        first_1+="\n";
                    }
​
                    QString second_1="\n";
                    for(int i=0;i<second.size();i++)
                    {
                        second_1+=second.at(i);
                        second_1+="\n";
                    }
​
                    ui->label_1->setText(first_1);
                    ui->label_2->setText(second_1);
​
                    qDebug()<<"上联:"<<first;
                    qDebug()<<"下联:"<<second;
                    qDebug()<<"横批:"<<center;
                }
             }
         }
    }
    //更新token
    else if(function_select==4)
    {
        //解析数据
        QJsonParseError json_error;
        QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);
        if(json_error.error == QJsonParseError::NoError)
        {
            //判断是否是对象,然后开始解析数据
            if(document.isObject())
            {
                QJsonObject obj = document.object();
                //解析token
                if(obj.contains("access_token"))
                {
                     QString data_token=obj.take("access_token").toString();
                     Token=data_token.toUtf8();
                     qDebug()<<"更新的Token:"<<data_token;
                     //保存到文件
                     SaveDataToFile(Token);
                     QMessageBox::information(this,"提示","密匙更新成功.",
                     QMessageBox::Ok,QMessageBox::Ok);
                }
            }
        }
        return;
    }
}

3.3 token数据存储


void Widget::SaveDataToFile(QString text)
{
    
    QString file;
    file=QCoreApplication::applicationDirPath()+"/"+ConfigFile;
    QFile filesrc(file);
    filesrc.open(QIODevice::WriteOnly);
    QDataStream out(&filesrc);
    out << text;  //序列化写字符串
    filesrc.flush();
    filesrc.close();
}
​
​

QString Widget::ReadDataFile(void)
{
    //读取配置文件
    QString text,data;
    text=QCoreApplication::applicationDirPath()+"/"+ConfigFile;
​
    //判断文件是否存在
    if(QFile::exists(text))
    {
        QFile filenew(text);
        filenew.open(QIODevice::ReadOnly);
        QDataStream in(&filenew); // 从文件读取序列化数据
        in >> data; //提取写入的数据
        filenew.close();
    }
    return data; //返回值读取的值
}

以上就是基于QT设计一个春联自动生成器的详细内容,更多关于QT春联生成器的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于QT设计一个春联自动生成器

本文链接: https://lsjlt.com/news/164055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于QT设计一个春联自动生成器
    目录1. 前言2. 实现原理3. 示例代码3.1 获取春联接口3.2 数据解析代码3.3 token数据存储1. 前言 春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在...
    99+
    2024-04-02
  • QT如何设计一个春联自动生成器
    小编给大家分享一下QT如何设计一个春联自动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 前言春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联...
    99+
    2023-06-29
  • 基于Java设计一个短链接生成系统
    目录引言短链接的原理短链接怎么设计的引言 相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计,第...
    99+
    2024-04-02
  • 基于Python做一个简单的动图生成器
    目录序言代码实战序言 现在的年轻人都开始每天保温杯里泡枸杞,这怎么能行呢? 想要每天过的好,美女必然少不了,每天看美女,只为了愉悦心情,心情好了,才长寿。 于是怀揣着愉悦心情的想法,...
    99+
    2023-01-03
    Python动图生成器 Python动图生成 Python动图
  • 基于PyQt5制作一个gif动态图片生成器
    这个小工具制作的目的是为了将多张图片组合后生成一张动态的GIF图片。设置界面化的操作,只需要将选中的图片导入最后直接生成动态图片。 导入界面相关的第三方库 from PyQt5.Q...
    99+
    2024-04-02
  • 基于C++编写一个文章生成器
    目录1.概况2.基本要求3.程序分析3.1 文件流读写3.2 建立前后缀关系3.3 字符串切片3.4 变长数组4.代码实现4.1 函数:数组加长4.2 类wordpair定义4.3 ...
    99+
    2023-03-19
    C++文章生成器 C++文章生成 C++生成器
  • 基于SSM试卷自动生成系统设计与实现是怎样的
    这篇文章将为大家详细讲解有关基于SSM试卷自动生成系统设计与实现是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。功能点: 1.后台管理员能够对用户管理,用户批量导入,用户组管理,角色管...
    99+
    2023-06-02
  • 基于PyQt5如何制作一个gif动态图片生成器
    这篇文章的内容主要围绕基于PyQt5如何制作一个gif动态图片生成器进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!这个小工具制作的目的是为了将多张图...
    99+
    2023-06-28
  • 基于Python编写一个二维码生成器
    目录前言1、安装第三方库2、QRCode参数解释3、自定义二维码生成器4、给二维码加图片5、全部代码前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Res...
    99+
    2024-04-02
  • 基于PyQT5制作一个二维码生成器
    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收。通过执行打包后的exe应用程序可以直接运行生成个性化二维码。 开始之前先来看一下通过二维码生成器是如何生成个性化二...
    99+
    2024-04-02
  • 基于mybatis-plus-generator实现代码自动生成器
    目录1.引入依赖2.简单的代码生成3.自定义模板生成代码3.1实现思路3.2定义代码生成常量3.3全局配置3.4定义生成代码模板的路径3.5定义各文件生成存储路径3.6数据源配置3....
    99+
    2024-04-02
  • 基于PyQt5制作一个数据图表生成器
    我的需求:手动配置X轴、Y轴、图表标题等参数自动通过Pyecharts模块生成可视化的html数据图表,并将浏览器图表展示到UI界面上。 制作出图表后的效果展示如下: 另外,生成...
    99+
    2024-04-02
  • 基于C++如何编写一个文章生成器
    这篇“基于C++如何编写一个文章生成器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C++如何编写一个文章生成器”文章吧...
    99+
    2023-07-05
  • 基于Python怎么编写一个二维码生成器
    这篇“基于Python怎么编写一个二维码生成器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Python怎么编写一个二维...
    99+
    2023-07-02
  • 基于Python实现一个自动关机程序并打包成exe文件
    目录1、实现效果2、实现步骤3、全部代码 Python代码打包exe文件在桌面运行的方式我之前有写,置顶了,也可以参考这里直接阅读:Python打包exe方法 1、实现效果 2、实...
    99+
    2024-04-02
  • 基于JavaSwing+mysql开发一个学生社团管理系统设计和实现
    前言: 项目是使用Java swing+mysql开发,可实现基础数据维护、用户登录注册、社团信息列表查看、社团信息添加、社团信息修改、社团信息删除以及退出注销等功能、界面设计比较简单易学、适合作为Java课设设计以...
    99+
    2022-05-11
    JavaSwing学生社团管理系统 Java mysql 学生社团管理系统 java mysql管理系统
  • 京东商城背后AI技术揭秘(一)——基于关键词自动生成摘要
    导言过去几十年间,人类的计算能力获得了巨大提升;随着数据不断积累,算法日益先进,我们已经步入了人工智能时代。确实,人工智能概念很难理解,技术更是了不起,背后的数据和算法非常庞大复杂。很多人都在疑惑,现在或未来AI将会有哪些实际应用呢?其实,...
    99+
    2023-06-05
  • TerraForm是一个基础设施自动化工具,它可以自动创建、更新、删除IT基础设施(例如服务器、网络设备、存储系统等Ten things you didn‘t know about Terraform
    作者:禅与计算机程序设计艺术 1.简介 TerraForm是一个基础设施自动化工具,它可以自动创建、更新、删除IT基础设施(例如服务器、网络设备、存储系统等)上的云资源配置。Terraform 的主要...
    99+
    2023-09-29
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作