Qt 处理html 提取链接

要从下列的html中提取链接,使用qt进行操作

<html>
<body>
<table>		
<tr><th>sender</th><th>receiver</th><th>name</th><th>downloaded</th><th>type</th><th>time</th></tr>

<tr><th>sender</th><th>leader</th><th><A href="http://127.0.0.1:8080/getfile?md5=dca45b3f7735051a5eac8c158ca2fdb7">qt.conf</A></th><th>0</th><th>pic</th><th>2014-02-22/12:14:01</th></tr>

<tr><th>sender</th><th>leader</th><th><A href="http://127.0.0.1:8080/getfile?md5=aa803bf8ec4e0a92b74dd6c274acee84">qt中文.conf</A></th><th>0</th><th>pic</th><th>2014-02-22/14:21:41</th></tr>

</table>
</body>
</html>

test.pro 

TEMPLATE = app

TARGET = html_parse

QT += xml console



SOURCES += main.cpp 

OBJECTS_DIR = .obj
MOC_DIR = .moc


main.cpp

#include <iostream>
#include <fstream>

#include <QFile>
#include <QDomDocument>
#include <QDebug>
#define strcasecmp _stricmp

using namespace std;

void parseElement(const QDomElement &element)
{
	qDebug()<<element.tagName();
	qDebug()<<element.text();

	if(element.tagName() == "A")//检查根结点是否为<A href="XX">
	{
		QString href=element.toElement().attribute("href");
		QString fileName = element.toElement().text();
		cout<<href.toStdString()<<endl;
		cout<<fileName.toStdString()<<endl;
		return ;
	}

	QDomNode child = element.firstChild();//检查第一个子树
	if(!child.isNull())
	{
		parseElement(child.toElement());
		while(!child.nextSibling().isNull())// 如果第二个子树存在继续递归检查
		{
			parseElement( child.nextSibling().toElement());
			child = child.nextSibling(); //child赋值为下一个兄弟结点
		}
	}
}


int main(int argc, char* argv[])
{

	QFile file("C:/Users/ddf/Desktop/ddd.xml");
	if (!file.open(QFile::ReadOnly))
	{
		return -1;
	}
	QDomDocument doc;

	if(!doc.setContent(&file, false))
	{
		return -1;
	}

	QDomElement root = doc.documentElement();
	parseElement(root);

	return 0;
}


中间用到了一个递归函数,用QDomDocument 树进行遍历。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt 是一个跨平台的 C++ 库,可用于构建 GUI 应用程序、网络应用程序和嵌入式应用程序等。Qt 对于中文的处理与其他语言一样,需要注意一些细节。 1. 字符编码 Qt 默认使用 UTF-8 编码字符,因此在使用中文时需要确保输入的字符串也是 UTF-8 编码的。如果你从外部文件或接口获取中文字符串,则需要将其转换为 UTF-8 编码后再传入 Qt。 2. 字体设置 中文需要使用支持中文字符集的字体才能正确显示,Qt 提供了多种字体选择,例如宋体、黑体、微软雅黑等。你可以通过 QFont 类来设置字体,例如: ```c++ QFont font("SimSun", 12, QFont::Bold); label->setFont(font); ``` 3. 文本输入框处理 在文本输入框中输入中文时,需要考虑中文输入法的问题。Qt 提供了 QLineEdit 和 QTextEdit 两个类用于文本输入框,它们可以通过设置输入过滤器来限制用户输入的字符类型。例如,可以使用 QRegExpValidator 类来限制用户只能输入汉字、数字和英文字符: ```c++ QRegExp regExp("[\\u4e00-\\u9fa5a-zA-Z0-9]+$"); QRegExpValidator *validator = new QRegExpValidator(regExp, this); lineEdit->setValidator(validator); ``` 4. 中文编程 在编写中文程序时,需要注意 Qt 的信号槽机制使用的是函数指针,因此中文函数名需要转换为英文。例如,如果你想在按钮点击时执行一个名为“保存”的函数,则需要将其重命名为英文函数名。 综上所述,Qt 处理中文需要注意字符编码、字体设置、文本输入框处理和中文编程等方面。如果你能正确处理这些问题,就可以轻松地开发出支持中文的 Qt 应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值