亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

QT如何設計一個春聯自動生成器

發布時間:2022-03-04 09:51:30 來源:億速云 閱讀:143 作者:小新 欄目:開發技術

小編給大家分享一下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;
    }

    /*
反饋的數據: "{"couplets":{"center":"萬象皆春","first":"龍年龍舞千秋業","second":"蛇歲蛇騰萬里春"},"log_id":1484407725829006888}"

上聯: "龍年龍舞千秋業"
下聯: "蛇歲蛇騰萬里春"
橫批: "萬象皆春"

上聯: "虎躍龍騰千里虎"
下聯: "龍騰虎躍萬家龍"
橫批: "虎躍龍騰"

*/
    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如何設計一個春聯自動生成器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

革吉县| 邵阳市| 日喀则市| 行唐县| 旬阳县| 和静县| 罗江县| 卢湾区| 涿州市| 庆云县| 宜兰县| 黄石市| 旬邑县| 南宫市| 监利县| 镇沅| 芮城县| 南陵县| 错那县| 阳曲县| 利津县| 德阳市| 全州县| 石渠县| 周至县| 英德市| 江安县| 广汉市| 定远县| 阿巴嘎旗| 南涧| 徐闻县| 和林格尔县| 峨山| 隆昌县| 南通市| 喀喇| 玉环县| 西安市| 开封县| 建水县|