用c++寫的一個詞典工具

使用的QT圖形界面,用libcurl獲取的網頁,在之中遇見了很多問題,一直想用c++類封裝一下libcurl,發現c++很不到家啊。索性用了友元函數。

先貼上代碼吧

main.cpp?


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>#include <QtGui/QApplication>#define mydebug 0using namespace std;#include "Dict.h"FILE *fp; //定義FILE類型指針size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{int written = fwrite(ptr, size, nmemb, (FILE *)fp);return written;
}int getpage(QString aUrl)
{CURL *curl;QString mUrl="";mUrl.append("http://dict.baidu.com/s?wd=");mUrl.append(aUrl);mUrl.append("&tn=dict");curl_global_init(CURL_GLOBAL_ALL);curl=curl_easy_init();QByteArray ba = mUrl.toLatin1();const char *c_str2 = ba.data();curl_easy_setopt(curl,CURLOPT_URL,c_str2);if((fp=fopen("/home/archy/newfile","w"))==NULL){curl_easy_cleanup(curl);exit(1);}curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);curl_easy_perform(curl);curl_easy_cleanup(curl);return 0;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

Dict.h


#ifndef DICT_H
#define DICT_H#include <QtGui>
#include "translate.h"
#include "one.h"class QPushButton;
class QLineEdit;
class QTextEdit;class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();friend int getpage(QString aUrl);QString getResult();private slots:void clearItem();void searchItem();void UpdateClearBtn();void UpdateSearchBtn();private:QPushButton *mClearBtn;QPushButton *mSearchBtn;QLineEdit *mItem;QTextEdit *mResult;one *aone;
};#endif // DICT_H

?Dict.cpp


1 #include <QtGui/QHBoxLayout>
#include <QtGui/QVBoxLayout>
#include "Dict.h"
#include <QMessageBox>extern int getpage(QString aUrl);Dialog::Dialog(QWidget *parent): QDialog(parent)
{//init class of translate//aone = new one();//init controlsmClearBtn = new QPushButton("Clear");mSearchBtn = new QPushButton("Search");mClearBtn->setFlat(1);mClearBtn->setFixedSize(50,30);mSearchBtn->setFlat(1);mSearchBtn->setFixedSize(50,30);mItem = new QLineEdit;mResult = new QTextEdit;connect(mClearBtn,SIGNAL(clicked()),this,SLOT(clearItem()));connect(mSearchBtn,SIGNAL(clicked()),this,SLOT(searchItem()));QHBoxLayout *aHbox = new QHBoxLayout;aHbox->addWidget(mClearBtn);aHbox->addWidget(mItem);aHbox->addWidget(mSearchBtn);QVBoxLayout *aVbox = new QVBoxLayout;aVbox->addLayout(aHbox);aVbox->addWidget(mResult);setLayout(aVbox);
}QString Dialog::getResult()
{FILE *fp;char tem;char buffer[2000],final[200];int line = 1,counti=0,token = 0,finalcount=0;fp = fopen("/home/archy/newfile","r");while((tem = fgetc(fp))!=EOF){if(tem=='\n'){line++;if(line==427){break;}}//line++;}fgets(buffer,2000,fp);while(buffer[counti]!='\n' && counti < 2000){if(buffer[counti] == '<'){token  = 0;}else if(buffer[counti] == '>'){token = 1;}else if(buffer[counti] != '>' && buffer[counti] != '<' && token == 1){final[finalcount] = buffer[counti];finalcount ++;}counti ++;}final[finalcount] = '\0';//QMessageBox msgBox;//msgBox.setText(final);//msgBox.exec();//QString string = QString(QLatin1String(final));
//    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));return string;
}void Dialog::clearItem()
{mItem->setText("");
}void Dialog::searchItem()
{if(mItem->text() != ""){getpage(mItem->text());QString astring = getResult();//QMessageBox msgBox;//msgBox.setText(astring);//msgBox.exec();mResult->setText(astring);}
}Dialog::~Dialog()
{}

還有一個問題就是亂碼的問題。

?因為是提取的網頁,只能一個char一個char那樣提取,現在還是沒有想到什么其他辦法提取。之后在char[] 轉 QString 的時候,總是亂碼。

?

?哪位博友知道怎么解決的話,請給點線索。?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458800.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VC++中Format用法

Format是一個很常用&#xff0c;卻又似乎很煩的方法&#xff0c;本人試圖對這個方法的幫助進行一些翻譯&#xff0c;讓它有一個完整的概貌&#xff0c;以供大家查詢之用&#xff1a;首先看它的聲明&#xff1a;function Format(const Format: string; const Args: array of con…

為什么NX10幫助功能無法找到HTML,NX10.0 新功能介紹視頻教程專輯

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓NX10.0 新功能介紹視頻教程專輯PLM之家NX10.0界面基礎新功能--1 NX新界面增強.mp4PLM之家NX10.0界面基礎新功能--2 問題管理功能增強.mp4PLM之家NX10.0界面基礎新功能--3 資源工具條開發API接口.mp4PLM之家NX10.0界面基礎新功能--4…

SVN,桌面右擊-settings-Icon Overlays 選擇 None

SVN&#xff0c;桌面右擊->settings->Icon Overlays 選擇 None 轉載于:https://www.cnblogs.com/yu520zhong/p/4857324.html

模擬實現strstr

今天我們來模擬實現strstr這個函數&#xff0c;首先我們先來了解一下這個函數&#xff0c;這個函數原型為char *strstr(char *str1,char *str2)&#xff0c;功能是&#xff1a;從字符串str1中查找是否有符串str2&#xff0c;若str2是str1的子串&#xff0c;則先確定str2在str1的…

股票歷史數據的獲取

從 Yahoo 獲取 歷史數據 HTML Output: http://finance.yahoo.com/q/hp?s300072.sz&d7&e23&f2010&a5&b11&c2010CSV Output: http://ichart.finance.yahoo.com/table.csv?s300072.sz&d7&e23&f2010&a5&b11&c2010由于歷史原因…

html5證書,1+X證書Web前端開發HTML專項練習

1 . HTML5 之前的 HTML 版本是&#xff1f; A.HTML 4.01 B.HTML 4 C.HTML 4.1 D.HTML 4.9 2 . HTML5 的正確 doctype 是&#xff1f; A.B.C.3 . 在 HTML5 中&#xff0c;哪個元素用于組合標題元素&#xff1f;A.B.C.D.4 . HTML5 中不再支持下面哪個元素&#xff1f;A.B.C.D.5 .…

PHP中封裝mysql數據庫鏈接(簡單版)

為什么80%的碼農都做不了架構師&#xff1f;>>> 1&#xff0c;封裝mysql數據鏈接需要哪些屬性 主機地址&#xff0c;數據庫名&#xff0c;數據庫密碼&#xff0c;數據庫名&#xff0c;字符集 2&#xff0c;利用構造方法在實例化類時&#xff0c;php底層會自動執行的…

c++異常處理機制

c異常處理機制 C異常處理機制是一個用來有效地處理運行錯誤的非常強大且靈活的工具&#xff0c;它提供了更多的彈性、安全性和穩固性&#xff0c;克服了傳統方法所帶來的問題. 異常的拋出和處理主要使用了以下三個關鍵字&#xff1a; try、 throw 、 catch 。 拋出異常即檢測…

html標簽api,html5新增標簽+API介紹

新增標簽1、embedembed標簽是html5新增的標簽&#xff0c;用來嵌入內容&#xff0c;比如插件等&#xff0c;常用于視頻文件的播放(為外部應用程序定義容器)。這篇文章介紹了embed的常用屬性&#xff0c;基本都是定義播放器的一些設置的&#xff0c;自動播放loop、開始時間start…

UVA10404

1 //題意&#xff1a;S 和 O 二人玩游戲 。N顆石頭&#xff0c;M個數&#xff0c;每次拿 M[i]個石頭&#xff08;i>0 && i<m) ,誰拿到最后一個誰贏。 2 3 // 定義f[i]為還剩i顆石頭時的勝負情況 &#xff0c;若S勝利&#xff0c;則記 1 &#xff0c;4 #include&…

java中定義一個CloneUtil 工具類

其實所有的java對象都可以具備克隆能力&#xff0c;只是因為在基礎類Object中被設定成了一個保留方法&#xff08;protected),要想真正擁有克隆的能力&#xff0c; 就需要實現Cloneable接口&#xff0c;重寫clone方法。通過克隆方法得到的對象是一個本地的副本。 1、實現Clonea…

C++異常以及錯誤處理

計算機應用程序中離不開錯誤處理&#xff0c;尤其是生產型大型軟件系統。應用軟件系統運行屬于循環處理事務&#xff0c;出錯后需要保證不能讓軟件程序直接退出。這就需要使用一定的程序容錯處理來應對。一般情況下&#xff0c;大型軟件開發中的軟件系統容錯處理會結合異常處理…

家用臺式計算機的額定功率,臺式機的功率(臺式電腦電源功率多大才合適?)...

臺式機的功率(臺式電腦電源功率多大才合適&#xff1f;)組裝一臺電腦&#xff0c;我們需要先挑選好硬件&#xff0c;搭配硬件最關鍵點就是CPU和主板兼容性&#xff0c;硬件之間的均衡性、電源功率等&#xff0c;均需要考慮周到。那么臺式電腦電源功率多大才合適&#xff1f;下面…

關于angularjs input上傳圖片前獲取圖片的Size 淺析

首先我們需要一個指令來追蹤input的change。ngChage不適用input[file]。 app.directive("fileread", [function () { return { scope: { selectedFile: "", changed: & }, link: function(scope, element, attributes) { element.bind("change&qu…

CountDownLacth詳解

一個同步輔助類&#xff0c;在完成一組正在其他線程中執行的操作之前&#xff0c;它允許一個或多個線程一直等待。 用給定的計數 初始化 CounDownLatch。由于調用了countDown() 方法&#xff0c;所以在當前計數到達零之前,await()方法會一直受阻塞。之后&#xff0c;會釋放所有…

怎么用計算機畫正弦函數圖像,幾何畫板如何繪制正弦函數圖象

考慮到三角函數問題描點的實際困難&#xff0c;教材表述時借助正弦線利用幾何法利用三角函數線作正弦函數圖象&#xff0c;但由此帶來的困難是如何實現這種效果。如果能讓三角函數線動起來&#xff0c;那將會更加直觀易懂。幾何畫板作為使用專業的幾何繪圖軟件&#xff0c;自帶…

C/C++常見指針錯誤 and 內存訪問越界

1) 內存分配未成功&#xff0c;卻使用了它。 編程新手常犯這種錯誤&#xff0c;因為他們沒有意識到內存分配會不成功。常用解決辦法是&#xff0c;在使用內存之前檢查指針是否為NULL。如果指針p是函數的參數&#xff0c;那么在函數的入口處用assert(p!NULL)進行檢查。如果是用m…

C#將dll打包到程序中

直接進入主題 先來看一個栗子,假設現在有一個第三方dll namespace TestLibrary1 {public class Test{public void Point(){Console.WriteLine("aaabbbccc");}} } TestLibrary1.dll在項目中引用,然后調用其中的方法Test,將輸出aaabbbccc using System;namespace Conso…

Exchange 2016集成ADRMS系列-12:域內outlook 2010客戶端測試

接下來&#xff0c;我們來到域內安裝了office 2010的機器上進行測試。 首先我們在客戶端上強制刷新組策略&#xff0c;把我們剛才設置的策略刷新下來。 然后我們可以運行gpresult /h result.html來看看策略是不是已經下來了。 策略下來之后&#xff0c;我們打開客戶端上面的out…

如何用css和HTML結合畫熊,結合偽元素實現的純CSS3高級圖形繪制

自小編上次整理了一些基礎圖形的繪制方法之后&#xff0c;大家都紛紛表示對css3的繪圖技巧學習很有幫助。雖說萬變不離其宗&#xff0c;再復雜的圖形也可以用最簡單的三角形或者圓弧組合出來&#xff0c;但仍有不少朋友反映&#xff0c;學會基本圖形也不懂得怎樣組合&#xff0…