关于qtwebkit

zp155334877 2011-02-23 02:24:43
由于本人需要实现VIPS算法,需要用到qtwebkit。简单来说,就是需要是用qtwebkit来对网页进行渲染,从而知道网页中每个字符图片等等在渲染后的页面中的坐标,字体大小,背景颜色等视觉信息。据我所知就是要用qtwebkit生成一颗render tree。由于本人以前没有qt开发经验,加上导师逼得紧,因此有几个问题请教各位高手:
测试的网页(存储在本地磁盘)

<html>
<head>
</head>
<body style="BACKGROUND-COLOR:#FFEC8B">
<p><font size="10" color='#FF33CC'>test</font><p>
<br>
<br>
<img src='./1/1.jpg'></img>
<img src='./1/2.jpg'></img>
<center>
<p><font color='#9400D3'>center</font><p>
</center>
</body>
</html>


测试代码:
[code=C]/C++
void traversal(QWebElement node)
{
if(node.isNull())
{
return;
}
QRect ss = node.geometry();
printf("Tag Name:%s Start: X-%d,Y-%d End: X-%d,Y-%d\n", qPrintable(node.tagName()), ss.topLeft().x(), ss.topLeft().y(), ss.bottomRight().x(), ss.bottomRight().y() );
//printf("Tag Name:%s Width: %d Height: %d\n", qPrintable(node.tagName()), ss.width(), ss.height());
QWebElement eee = node.firstChild();
if(!eee.isNull())
{
traversal(eee);
}

eee = node.nextSibling();
if(!eee.isNull())
{
traversal(eee);
}

return ;
}

int main(int argc, char *argv[])
{
FILE* fp = fopen("./tt.html", "rb");
if(fp == NULL)
{
printf("Can't read file!\n");
return -1;
}
char* source = new char[1024*1024];
memset(source, 0, 1024*1024);
fread(source, 1, 1024*1024, fp);
fclose(fp);

QString content(source);
QUrl url("file:///home/rmss/zp/1_files");
QApplication a(argc, argv);
QWebView *view = new QWebView;

QWebSettings * settings = QWebSettings::globalSettings();
//settings->setAttribute(QWebSettings::AutoLoadImages, false);
settings->setAttribute(QWebSettings::JavascriptEnabled, false);
settings->setAttribute(QWebSettings::JavaEnabled, false);
settings->setAttribute(QWebSettings::PluginsEnabled, false);
settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true);
settings->setDefaultTextEncoding("GB2312");

view->setHtml(content, url);
view->show();

QWebPage* page = view->page();
QWebFrame* frame = page->mainFrame();

QString str = frame->renderTreeDump();
printf("RENDER:%s\n", qPrintable(str));

QWebElement document = frame->documentElement();
QWebElement eee = document.findFirst("body");
if(eee.isNull())
{
printf("failed!\n`");
}
QString info = eee.styleProperty("background-color", QWebElement::ComputedStyle);
printf("background:%s\n", qPrintable(info));

traversal(eee);
return 0;
}
[/code]
我在遍历dom树时,对每个node调用geometry函数,文档上说这个函数应该是返回该node中内容对应的区域,但是我发现输出的坐标不对,请问qtwebkit中有没有这个功能,输出每个node中内容在渲染后的页面中的位置,比如我想知道字符串“center”在网页中哪个位置显示,是什么字体,是什么颜色。

...全文
827 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongyanmin 2011-02-23
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2833996
zp155334877 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kongyanmin 的回复:]

你是不是可以用javascript 交互呀。
[/Quote]

你好,请问如何实现?本人是新手,而且时间紧迫,所以没多少时间仔细阅读文档和代码。
kongyanmin 2011-02-23
  • 打赏
  • 举报
回复
你是不是可以用javascript 交互呀。
zp155334877 2011-02-23
  • 打赏
  • 举报
回复
上面写的太罗嗦了,这里再说一下我的问题。
请问如何用qtwebkit得到网页的layout信息,比如我想网页中一个图片在什么位置,他的背景颜色,某个链接的锚文本是什么字体,他的字体大小,请问qtwebkit能不能实现该功能?能实现的话,应该如何做呢,请给一点提示,当然有DEMO更好。
zp155334877 2011-02-23
  • 打赏
  • 举报
回复
自己顶一下

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧