文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 01:12

关注

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯