您好,登錄后才能下訂單哦!
小編給大家分享一下QT如何設計一個春聯自動生成器,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
春節是中國最隆重的傳統節日,一到過年家家戶戶肯定是要貼春聯;在春節前夕,會用大紅紙張,加上濃墨書寫祝福詞語,在春節當天貼于門框兩邊,寓意著一年吉祥如意,還會將福字倒轉貼于門上,有"福到臨門"的意思。為了方便找到合適的春聯句子,我這里就采用現成的自然語言處理接口實現了一個自動生成春聯的軟件,輸入提示詞就可以完成春聯的生成,方便寫春聯時參考。
下面是實現的效果:
小時候最期盼的日子就是過年,可以穿新衣服,吃平時吃不到的好吃的,吃完年夜飯一起看春晚,放鞭炮;現在生活水平逐漸提高,平時穿的吃的也不差,也沒有很期待了,現在過年吃完飯大家都是盯著手機玩,感覺沒有以前小時候那種感覺了。
軟件是采用Qt框架設計,調用百度大腦的智能春聯接口完成春聯生成。
官網地址: https://ai.baidu.com/tech/nlp_apply
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": "喜迎新春" } }
下面列出主要的核心代碼,可以直接貼到自己工程里就可以使用。
//獲取春聯 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); }
//解析反饋結果 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; } }
/* 功能: 保存數據到文件 */ 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如何設計一個春聯自動生成器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。