首页 > 作文

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

更新时间:2023-04-04 19:23:27 阅读: 评论:0

目录
1. 前言2. 实现原理3. 示例代码3.1 获取春联接口3.2 数据解析代码3.3 token数据存储

1. 前言

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

下面是实现的效果:

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

2. 实现原理

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

官网地址:/d/file/titlepic/pp style="text-align:center">

http请求方法: post

请求地址: /d/file/titlepic/ppurl的参数:access_token 通过api key和cret key获取的access_token

请求头header:content-type application/json​

请求参数

text 春联主题的提示字符

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

返回参数解释

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

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

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

请求示例:

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

返回的数据示例:

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

3. 示例代码

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

3.1 获取春联接口

//获取春联void widget::get_couplettext(qstring terms,int index){    function_lect=1;    qstring requesturl;    qnetworkrequest request;​    //存放图片ba64编码    qstring imgdata;​    //打包请求参数赋值    qjsonobject post_data;    qjsondocument document;​    //设置请求地址    qurl url;    qbytearray post_param;​    //请求地址    requesturl = "/d/file/titlepic/couplets;​    //设置数据提交格式    request.theader(qnetworkrequest::contenttypeheader, qvariant("application/json"));​    //设置请求参数:    post_data.inrt("text",terms); //字符串(限5字符数以内)即春联的主题    post_data.inrt("index",index);  //int 整数 默认为数值为0,即第一幅春联。每换一次,数值加1即可,一定数量后会返回之前的春联结果。​    //构造请求    url.turl(requesturl + "?access_token=" +dnf图片 token);    request.turl(url);​    document.tobject(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;    }​    /*反馈的数据: "{"couplets":{"center":"万象皆春","first":"龙年龙舞千秋业","cond":"蛇岁蛇腾万里春"},"log_id":1484407725829006888}"​上联: "龙年龙舞千秋业"下联: "蛇岁蛇腾万里春"横批: "万象皆春"​上联: "虎跃龙腾千里虎"下联: "龙腾虎跃万家龙"横批: "虎跃龙腾"​*/    if(function_lect==1) //春联生成    {        //解析数据        qjsonparerror json_error;        qjsondocument document = qjsondocument::fromjson(replydata, &json_error);        if(json_error.error == qjsonparerror::noerror)        {            //判断是否是对象,然后开始解析数据            if(document.isobject())            {                qjsonobject obj = document.object();                //解析错误代码                if(obj.contains("error_code"))                {                    int error_code=obj.take("error_code").toint();                    switch (error_code)                    {                    ca 0: //成功                        break;                    ca 110:                    ca 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;                        }                    }                }                el if(obj.contains("couplets"))                {                    qjsonobject 风铃的声音obj2=obj.take("couplets").toobject();​                    qstring center; //横批                    qstring first;  //上联-第一                    qstring cond; //下联第二​                    if(obj2.contains("center"))                    {                        center=obj2.take("center").tostring();                    }                    if(obj2.contains("first"))                    {                        first=obj2.take("first").tostring();                    }                    if(obj2.contains("cond"))                    {                        cond=obj2.take("cond").tostring();                    }​                    ui->label_0->ttext(center);​                    qstring first_1="\n";                    for(int i=0;i<first.size();i++)                    {                        first_1+=first.at(i);                        first_1+="\n";                    }​                    qstring cond_1="\n";                    for(int i=0;i<cond.size();i++)                    {                        cond_1+=cond.at(i);                        cond_1+="\n";                    }​                    ui->label_1->ttext(first_1);                    ui->label_2->ttext(cond_1);​                    qdebug()<<"上联:"<<first;                    qdebug()<<"下联:"<<cond;                    qdebug()<<"横批:"<<center;                }             }         }    }    //更新token    el if(function_lect==4)    {        //解析数据        qjsonparerror json_error;        qjsondocument document = qjsondocument::fromjson(replydata, &json_error);        if(json_error.error == qjsonparerror::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.clo();}​​/*功能: 从文件读取数据*/qstring widget::readdatafile(void){    //读取配置文件    qstri拟人的表达效果ng text,data;    text=qcoreapplication::applicationdirpath()+"/"+configfile;​    //判断文件是否存在    if(qfile::exists(text))    {        qfile filenew(text);        filenew.open(qiodevice::readonly);        qdatastream in(&filenew); // 从文件读取序列化数据        in >> data; //提取写入的数据        filenew.clo();    }    return data; //返回值读取的值}

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

本文发布于:2023-04-04 19:23:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/cb897a28dc01fdfe0862f1e6867bec7b.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:基于QT设计一个春联自动生成器.doc

本文 PDF 下载地址:基于QT设计一个春联自动生成器.pdf

标签:春联   数据   横批   上联
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图