返回顶部
首页 > 资讯 > 精选 >QT如何设计一个春联自动生成器
  • 863
分享到

QT如何设计一个春联自动生成器

2023-06-29 01:06:41 863人浏览 独家记忆
摘要

小编给大家分享一下Qt如何设计一个春联自动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 前言春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联

小编给大家分享一下Qt如何设计一个春联自动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1. 前言

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

下面是实现的效果:

QT如何设计一个春联自动生成器

QT如何设计一个春联自动生成器

QT如何设计一个春联自动生成器

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

2. 实现原理

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

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

QT如何设计一个春联自动生成器

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如何设计一个春联自动生成器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

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

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

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

猜你喜欢
  • QT如何设计一个春联自动生成器
    小编给大家分享一下QT如何设计一个春联自动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 前言春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联...
    99+
    2023-06-29
  • 基于QT设计一个春联自动生成器
    目录1. 前言2. 实现原理3. 示例代码3.1 获取春联接口3.2 数据解析代码3.3 token数据存储1. 前言 春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在...
    99+
    2024-04-02
  • 如何用python编写一个生成春联软件
    目录前言效果展示代码打包exe可执行文件总结前言 最近不是快过年了,Python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联、横...
    99+
    2024-04-02
  • java如何实现自动生成数据库设计文档
    目录前言实现步骤main方法类全部代码表qrtz_blob_triggers表qrtz_calendars表qrtz_cron_triggers前言 以前我们还需要手写数据库设计文档...
    99+
    2024-04-02
  • pycharm如何设置自动生成作者信息
    目录设置自动生成作者信息其他变量设置模板,自动生成作者、时间、版本等基本信息效果预览实现过程设置自动生成作者信息 1、file->settings->Editor->...
    99+
    2024-04-02
  • 手机wps自动生成目录如何设置
    本篇内容主要讲解“手机wps自动生成目录如何设置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“手机wps自动生成目录如何设置”吧!首先打开手机wps,点击左下角“工具” 接着进入其中的“查看”选...
    99+
    2023-07-02
  • ionic2中如何使用自动生成器
    这篇文章给大家分享的是有关ionic2中如何使用自动生成器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ionic generator是命令行的功能,ionic2自动帮我们创建应...
    99+
    2024-04-02
  • 如何使用JavaScript创建一个兔年春节倒数计时器
    这篇文章主要介绍了如何使用JavaScript创建一个兔年春节倒数计时器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用JavaScript创建一个兔年春节倒数计时器文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-04
  • 如何在Java中利用POI生成一个带联动下拉框的excel表格
    本篇文章为大家展示了如何在Java中利用POI生成一个带联动下拉框的excel表格,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体代码如下所示:import java.io.File;import...
    99+
    2023-05-31
    java poi excel
  • 基于PyQt5如何制作一个gif动态图片生成器
    这篇文章的内容主要围绕基于PyQt5如何制作一个gif动态图片生成器进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!这个小工具制作的目的是为了将多张图...
    99+
    2023-06-28
  • 基于C++如何编写一个文章生成器
    这篇“基于C++如何编写一个文章生成器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C++如何编写一个文章生成器”文章吧...
    99+
    2023-07-05
  • 如何在java中利用cglib动态生成一个实体bean
    如何在java中利用cglib动态生成一个实体bean?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。maven依赖:<dependency>&nbs...
    99+
    2023-06-06
  • 详解如何通过Python制作一个密码生成器
    目录原由编程思路代码效果如下补充原由 定期更换密码是一种非常重要的安全措施,这种做法可以有效地保护你的账户和个人信息不受黑客和网络攻击者的侵害。 密码泄露是一个非常普遍的问题,许多人...
    99+
    2023-05-19
    Python实现密码生成器 Python密码生成器 Python密码
  • 利用Java如何实现一个随机生成动态验证码功能
    利用Java如何实现一个随机生成动态验证码功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言相对来说呢,jpg格式的相对来说容易破解一点,当然也取决于你的干扰元素,元素...
    99+
    2023-05-31
    java 动态 验证码
  • 如何在MySQL中设计一个性能优化的会计系统表结构以提高查询和报表生成速度?
    如何在MySQL中设计一个性能优化的会计系统表结构以提高查询和报表生成速度?在现代企业的会计系统中,数据量庞大且复杂,频繁的查询和报表生成是常见的需求。为了提高系统的性能和响应速度,设计一个优化的数据库表结构是至关重要的。规范化数据库表结构...
    99+
    2023-10-31
    MySQL 性能优化 会计系统
  • JavaScript如何在0和设定的最大值之间生成一个数字数组
    小编给大家分享一下JavaScript如何在0和设定的最大值之间生成一个数字数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在...
    99+
    2024-04-02
  • 如何在 Go 语言中实现一个二维码生成器,并将生成日志保存到文件?
    在本文中,我们将探讨如何使用 Go 语言实现一个二维码生成器,并将生成日志保存到文件。二维码是一种二维条码,它可以存储大量信息,并且可以在很小的空间内进行存储。在日常生活中,二维码可以用于各种场合,如支付、门票、商业广告等。 Go 语言提供...
    99+
    2023-07-26
    二维码 日志 打包
  • 如何使用 Go 语言编写一个能够自动生成二维码并记录日志的打包工具?
    Go 语言是一种强类型、静态类型的编程语言,它的设计目标是简单、高效和可靠。在开发过程中,我们常常需要使用一些工具来帮助我们完成一些重复性的工作,例如打包和发布应用程序。本文将介绍如何使用 Go 语言编写一个能够自动生成二维码并记录日志的打...
    99+
    2023-07-26
    二维码 日志 打包
  • 如何设计一个支持在线答题中的实时互动的系统
    随着互联网的发展,在线学习已经成为一种普遍的学习方式。在线答题平台的出现,让学习变得更加灵活和便捷。然而,目前大部分在线答题平台只是提供了简单的答题功能,并没有实现实时互动的功能。为了满足学生们对于更加丰富多样化的学习体验的需求,我们需要设...
    99+
    2023-10-21
    - 在线答题 - 实时互动 - 系统设计
  • 如何屏蔽浏览器自动的input样式且不影响设计整体的一致性
    如何屏蔽浏览器自动的input样式且不影响设计整体的一致性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 今...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作