使用的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 的时候,总是乱码。

哪位博友知道怎么解决的话,请给点线索。

用c++写的一个词典工具相关推荐

  1. Python3 + wxpython写的一个翻译工具

    Python3 + wxpython写的一个翻译工具 学习日语一直有一个问题,有些时候我们看到一句话,可能大致上能猜出来是什么意思,但是日语汉字却不知道怎么去读.我就有这样的烦恼,极大的降低了我对日语 ...

  2. aspose 转pdf表格大小乱了_自己写了一个小工具类:pdf转word,没有页数和大小限制,保真!...

    昨天下午遇到一个问题,想把一个比较大的pdf转化为word,结果使用了各种工具都收费.想着干脆写一个小工具吧,一开始使用的python等等试了好几个网上的代码,结果全都失真.于是乎不得不花了一下午自己 ...

  3. python登录网站下载excel_写了一个小工具,爬去指定网站的的登陆后的数据进行整理,可以正常登陆了,但是无法下载excel文件?...

    题目描述 我计划写一个小工具,爬取我账号里面的数据,采用requests登陆后,虽然可以正常登陆,但是无法下载里面Excel数据,麻烦大货帮我分析一下,怎么解决.我知道可能是权限问题,下载的时候需要带 ...

  4. github用相对路径显示图片_我写了一个开源工具, 让Github的README.md可以正常显示超大图片...

    最终效果对比 图片替换前: 图片显示有好有坏,能否显示,全凭运气 图片替换后: 所有大图正常显示! 本项目永久开源地址 痛点: Github的README.md展示图片效果并不完美 为了让项目演示更生 ...

  5. 情人节,我表白了CSDN小姐姐后,竟然...【为表白写了一个绘图工具,让我不再手残】

    情人节,我表白了CSDN小姐姐后,竟然-竟然有人看了这篇文. 以下图片素材由一个还没写完的工具绘制,稍后会放在CSDN的代码仓库(现在能用了,还没时间改,颜色填充算法还没写,有能力的朋友可以修改一下) ...

  6. Java写的一个记事本工具

    近日整理电脑发现了不少大学与研究生时期的软件作品,先发布出来了,一是记录一下十年的程序生涯:二是对于有需要的人可以利用之. 先发布一个记事本程序,这个记事本支持HTTP下载内容的显示. 运行截图如下: ...

  7. 之前帮朋友写的一个小工具-征途2新浪卡全自动淘号工具+按钮精灵脚本

    比较简单的小工具 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...

  8. 分享一个数据库工具DTOOLS

    整理电脑的时候发现一个好的工具--DTOOLS,他是我在09年左右写的一个数据库工具. 可以干什么呢? 我罗列一下: 1.全面的展示数据库字段情况 2. 迅速切换,展示数据库记录情况,不输语句,即点即 ...

  9. 和别人共享网络,老有人用讯雷什么的,上网卡死了,自己写了局域网流量控制工具,开源出来大家共享

    我这里和别人共享网络,但局域网里面总是有人看讯雷什么的,虽然是20M的网络,但打开网页还是卡得不行,我刚来的时候网页都老打不开.实在没办法,他们不限流量,我就只好自己写了一个流量控制工具帮他们限流量了 ...

最新文章

  1. python读取excel文件-python读取excel文件
  2. CF1000G Two-Paths
  3. 读《系统虚拟化-原理与实现》-第三章
  4. 云计算时代下的数据中心运维之路
  5. anaconda创建新环境_【创建社会主义新农村】怀城街道:转变整治理念 农村人居环境换新颜...
  6. android10适配机型华为,EMUI10适配机型进度公布 这10款机型将率先尝鲜
  7. 【C语言】文件程序设计实践
  8. Mybatis_day2_Mybatis的参数深入
  9. Bailian2935 有未知数的表达式【递归】
  10. 两篇一区SCI可认定A类博士!享​200平住房+40万科启!硕士也入编!
  11. 微服务,正确实施的SOA?
  12. Thinkpad E431 解决无线网卡无法开启
  13. GitHub使用技巧,在线ide编辑代码、在线运行代码、快速查找阅读代码
  14. 计算机专业 外文数据库,计算机专业外文翻译原文 数据库管理系统介绍.doc
  15. 程炳皓很明智陈一舟不吃亏
  16. 观影计划:漫威电影宇宙「无限战争」系列
  17. 六十星系之25廉贞天相坐子午
  18. 钢琴家以前是学计算机的,奇特的钢琴家——裘元朴
  19. 服务器主控芯片,物联网主控芯片6大架构分析 谁能独当一面
  20. 利用 edge的朗读功能,写一个python文本转语音的代码

热门文章

  1. Android入门(13)| Android权限 与 内容提供器
  2. Redis:10---List对象
  3. C语言字符输出格式化
  4. 大数据学习(1)-大数据概述
  5. 《深入理解JVM.2nd》笔记(三):垃圾收集器与垃圾回收策略
  6. springBoot的模版引擎
  7. C++If与Switch语句
  8. fread rb与r,wb,w的区别
  9. 前端VUE工程不占用80端口,浏览器不带端口访问VUE项目的实现
  10. RabbitMQ MQTT协议和AMQP协议