Qt:让QWebview返回完整的URL

时间:2014-07-20 21:25:53

标签: html qt url qwebview

我的应用程序中有一个类,它显示基于HTML的文档,该文档作为一组HTML文件存储在用户的硬盘上。

我的文档模块具有一项功能,可以让您记住最近查看过的页面。我目前正在使用QWebView :: url()获取当前页面的URL,以便将其存储在配置中。下次激活文档查看器时,将从配置中提取URL,进行适当处理,然后将其发送回QWebView。这样,用户可以选择他/她离开的地方。

QWebView :: url是获取当前URL的好方法,除非它不像我需要的那样精确。它只捕获基本URL而没有任何附加功能。例如,我的文档中的每个标题都附加了一个id属性,我用它来制作一个可浏览的目录。例如,用户可以单击TOC中的任何项目以跳转到相应的标题。

然而,当我需要 file:/// Z:/ doc时,QWebKit :: url只会返回如下内容: file:/// Z:/doc/foo.html /foo.html#heading ,其中#heading是在TOC中点击的最后一项。我怎样才能在URL字符串中包含那些内部链接(不太确定它们的名称是什么)?

在完美的世界中,QWebView会自动知道用户何时滚动浏览当前文档中的每个标题,并自动更新URL字符串。这将允许在会话之间几乎无缝读取。我不希望它以这种方式工作,但这是否可能?

1 个答案:

答案 0 :(得分:1)

这对我来说就像是一种魅力。

的main.cpp

#include <QWebView>
#include <QDebug>
#include <QApplication>

int main(int argc, char **argv)
{
    QApplication application(argc, argv);
    QWebView view;
    view.load(QUrl("http://qt-project.org/doc/qt-5/QWebView.html"));
    view.show();
    QObject::connect(&view, &QWebView::urlChanged, [&view]() {
        qDebug() << "Url being viewed:" << view.url().toString();
    });
    return application.exec();
}

main.pro

TEMPLATE = app
TARGET = main
QT += widgets webkit webkitwidgets
CONFIG += c++11
SOURCES += main.cpp

构建并运行

qmake && make && main

然后尝试点击右侧的详细信息。

输出

Changed url being viewed: "http://qt-project.org/doc/qt-5/QWebView.html"
Changed url being viewed: "http://qt-project.org/doc/qt-5/QWebView.html#details"
Changed url being viewed: "http://qt-project.org/doc/qt-5/QWebView.html#details"

即使信号发出两次,您也可以看到url访问器方法返回正确的URL。