最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于QT設(shè)計(jì)一個(gè)春聯(lián)自動生成器

 更新時(shí)間:2022年01月27日 16:50:56   作者:DS小龍哥  
春節(jié)是中國最隆重的傳統(tǒng)節(jié)日,一到過年家家戶戶肯定是要貼春聯(lián);在春節(jié)前夕,會用大紅紙張,加上濃墨書寫祝福詞語。本文將利用Qt框架設(shè)計(jì)一個(gè)春聯(lián)自動生成器,需要的可以參考一下

1. 前言

春節(jié)是中國最隆重的傳統(tǒng)節(jié)日,一到過年家家戶戶肯定是要貼春聯(lián);在春節(jié)前夕,會用大紅紙張,加上濃墨書寫祝福詞語,在春節(jié)當(dāng)天貼于門框兩邊,寓意著一年吉祥如意,還會將福字倒轉(zhuǎn)貼于門上,有"福到臨門"的意思。為了方便找到合適的春聯(lián)句子,我這里就采用現(xiàn)成的自然語言處理接口實(shí)現(xiàn)了一個(gè)自動生成春聯(lián)的軟件,輸入提示詞就可以完成春聯(lián)的生成,方便寫春聯(lián)時(shí)參考。

下面是實(shí)現(xiàn)的效果:

小時(shí)候最期盼的日子就是過年,可以穿新衣服,吃平時(shí)吃不到的好吃的,吃完年夜飯一起看春晚,放鞭炮;現(xiàn)在生活水平逐漸提高,平時(shí)穿的吃的也不差,也沒有很期待了,現(xiàn)在過年吃完飯大家都是盯著手機(jī)玩,感覺沒有以前小時(shí)候那種感覺了。

2. 實(shí)現(xiàn)原理

軟件是采用Qt框架設(shè)計(jì),調(diào)用百度大腦的智能春聯(lián)接口完成春聯(lián)生成。

官網(wǎng)地址: https://ai.baidu.com/tech/nlp_apply

HTTP請求方法: POST

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

URL的參數(shù):access_token 通過API Key和Secret Key獲取的access_token

請求頭Header:Content-Type  application/json?

請求參數(shù)

text    春聯(lián)主題的提示字符

index   春聯(lián)的索引. 默認(rèn)是0,同一個(gè)提示符,多次獲取時(shí),這個(gè)索引+1就能訪問后面的春聯(lián).?

返回參數(shù)解釋

first   春聯(lián)上聯(lián):成7-9個(gè)字的上聯(lián)

second  春聯(lián)下聯(lián):生成7-9個(gè)字的春聯(lián)下聯(lián)

center  春聯(lián)橫批:生成4個(gè)字的春聯(lián)橫批

請求示例:

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

返回的數(shù)據(jù)示例:

{   
    "couplets" : {
       "first":  "新春新水千山綠",
       "second": "春色春風(fēng)萬戶紅",
       "center": "喜迎新春"
    }
}

3. 示例代碼

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

3.1 獲取春聯(lián)接口

//獲取春聯(lián)
void Widget::get_CoupletText(QString terms,int index)
{
    function_select=1;
    QString requestUrl;
    QNetworkRequest request;
?
    //存放圖片BASE64編碼
    QString imgData;
?
    //打包請求參數(shù)賦值
    QJsonObject post_data;
    QJsonDocument document;
?
    //設(shè)置請求地址
    QUrl url;
    QByteArray post_param;
?
    //請求地址
    requestUrl = "https://aip.baidubce.com/rpc/2.0/creation/v1/couplets";
?
    //設(shè)置數(shù)據(jù)提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
?
    //設(shè)置請求參數(shù):
    post_data.insert("text",terms); //字符串(限5字符數(shù)以內(nèi))即春聯(lián)的主題
    post_data.insert("index",index);  //int 整數(shù) 默認(rèn)為數(shù)值為0,即第一幅春聯(lián)。每換一次,數(shù)值加1即可,一定數(shù)量后會返回之前的春聯(lián)結(jié)果。
?
    //構(gòu)造請求
    url.setUrl(requestUrl + "?access_token=" + Token);
    request.setUrl(url);
?
    document.setObject(post_data);
    post_param = document.toJson(QJsonDocument::Compact);
?
    //發(fā)送請求
    manager->post(request, post_param);
}

3.2 數(shù)據(jù)解析代碼

//解析反饋結(jié)果
void Widget::replyFinished(QNetworkReply *reply)
{
    int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
?
    //讀取所有數(shù)據(jù)
    QByteArray replyData = reply->readAll();
?
    qDebug()<<"狀態(tài)碼:"<<statusCode;
    qDebug()<<"反饋的數(shù)據(jù):"<<QString(replyData);
?
    //判斷狀態(tài)碼
    if(200 != statusCode)
    {
        return;
    }
?
    /*
反饋的數(shù)據(jù): "{"couplets":{"center":"萬象皆春","first":"龍年龍舞千秋業(yè)","second":"蛇歲蛇騰萬里春"},"log_id":1484407725829006888}"
?
上聯(lián): "龍年龍舞千秋業(yè)"
下聯(lián): "蛇歲蛇騰萬里春"
橫批: "萬象皆春"
?
上聯(lián): "虎躍龍騰千里虎"
下聯(lián): "龍騰虎躍萬家龍"
橫批: "虎躍龍騰"
?
*/
    if(function_select==1) //春聯(lián)生成
    {
        //解析數(shù)據(jù)
        QJsonParseError json_error;
        QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);
        if(json_error.error == QJsonParseError::NoError)
        {
            //判斷是否是對象,然后開始解析數(shù)據(jù)
            if(document.isObject())
            {
                QJsonObject obj = document.object();
                //解析錯(cuò)誤代碼
                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;  //上聯(lián)-第一
                    QString second; //下聯(lián)第二
?
                    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()<<"上聯(lián):"<<first;
                    qDebug()<<"下聯(lián):"<<second;
                    qDebug()<<"橫批:"<<center;
                }
             }
         }
    }
    //更新token
    else if(function_select==4)
    {
        //解析數(shù)據(jù)
        QJsonParseError json_error;
        QJsonDocument document = QJsonDocument::fromJson(replyData, &json_error);
        if(json_error.error == QJsonParseError::NoError)
        {
            //判斷是否是對象,然后開始解析數(shù)據(jù)
            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數(shù)據(jù)存儲

/*
功能: 保存數(shù)據(jù)到文件
*/
void Widget::SaveDataToFile(QString text)
{
    /*保存數(shù)據(jù)到文件,方便下次加載*/
    QString file;
    file=QCoreApplication::applicationDirPath()+"/"+ConfigFile;
    QFile filesrc(file);
    filesrc.open(QIODevice::WriteOnly);
    QDataStream out(&filesrc);
    out << text;  //序列化寫字符串
    filesrc.flush();
    filesrc.close();
}
?
?
/*
功能: 從文件讀取數(shù)據(jù)
*/
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); // 從文件讀取序列化數(shù)據(jù)
        in >> data; //提取寫入的數(shù)據(jù)
        filenew.close();
    }
    return data; //返回值讀取的值
}

以上就是基于QT設(shè)計(jì)一個(gè)春聯(lián)自動生成器的詳細(xì)內(nèi)容,更多關(guān)于QT春聯(lián)生成器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c語言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡單)

    c語言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡單)

    這篇文章主要介紹了c語言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(比較簡單),需要的朋友可以參考下
    2014-01-01
  • QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    本文介紹了如何使用QT技術(shù)實(shí)現(xiàn)一個(gè)具有動態(tài)效果的隨機(jī)驗(yàn)證碼系統(tǒng),詳述了CaptchaMovableLabel和CaptchaLabel兩個(gè)自定義類的功能,包括顯示和拖動字母、繪制噪音點(diǎn)和線條、以及隨機(jī)生成字母等,講解了如何通過繼承QWidget和QLabel來實(shí)現(xiàn)這些功能,并通過MainWindow創(chuàng)建界面
    2024-10-10
  • 詳解基于Matlab的空心散點(diǎn)檢測

    詳解基于Matlab的空心散點(diǎn)檢測

    這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)空心散點(diǎn)檢測,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定的幫助,感興趣的可以跟隨小編了解一下
    2022-02-02
  • C語言實(shí)現(xiàn)簡易學(xué)生成績管理系統(tǒng)

    C語言實(shí)現(xiàn)簡易學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Qt入門學(xué)習(xí)之?dāng)?shù)據(jù)庫操作指南

    Qt入門學(xué)習(xí)之?dāng)?shù)據(jù)庫操作指南

    Qt SQL模塊為數(shù)據(jù)庫提供了編程支持,Qt支持很多種常見的數(shù)據(jù)庫,如 MySQL Oracle、MS SQL Server、SQLite等,下面這篇文章主要介紹了這篇文章主要給大家介紹了關(guān)于Qt入門學(xué)習(xí)之?dāng)?shù)據(jù)庫操作指南的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • C語言數(shù)據(jù)類型枚舉enum全面詳解示例教程

    C語言數(shù)據(jù)類型枚舉enum全面詳解示例教程

    生活中有很多地方會用到枚舉,比如一周有7天,可以一一枚舉;性別有男、女...等等都可以可以一一枚舉,今天來和筆者一起學(xué)習(xí)一下c語言枚舉吧
    2021-10-10
  • C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)總結(jié)

    C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng)總結(jié)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++模板元編程實(shí)現(xiàn)選擇排序

    C++模板元編程實(shí)現(xiàn)選擇排序

    這篇文章主要介紹了C++模板元編程實(shí)現(xiàn)選擇排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C語言實(shí)現(xiàn)Floyd算法

    C語言實(shí)現(xiàn)Floyd算法

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)Floyd算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作

    c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作

    這篇文章主要介紹了c++ sqlite3如何利用事務(wù)(BEGIN;COMMIT;)批量操作,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

舒城县| 夹江县| 永福县| 忻城县| 虹口区| 莫力| 华容县| 宣武区| 乐业县| 乃东县| 区。| 庆元县| 静乐县| 河西区| 四平市| 酒泉市| 西昌市| 厦门市| 方正县| 黎城县| 澄江县| 大英县| 新建县| 吐鲁番市| 陆河县| 林州市| 裕民县| 崇阳县| 海晏县| 遂宁市| 缙云县| 安义县| 腾冲县| 柏乡县| 昌宁县| 和田市| 左权县| 临西县| 阳城县| 清水河县| 富锦市|