Qt:如何让QWebview返回完整的URL

3
我在应用程序中有一个类,用于显示存储在用户硬盘上的一组HTML文件的基于HTML的文档。
我的文档模块具有记住最近查看页面的功能。我目前使用QWebView :: url()获取当前页面的URL,以便将其存储在配置中。下次激活文档查看器时,会从配置中提取URL,适当处理,然后发送回QWebView。这样,用户可以继续上次阅读的地方。
QWebView :: url是获取当前URL的好方法,但它不如我需要的那么精确。它只捕获基本URL而没有任何附加项。例如,我的文档中的每个标题都带有id属性,我使用它来制作可浏览的目录。例如,用户可以单击TOC中的任何项目以跳转到相应的标题。
然而,QWebKit :: url仅返回类似于file:///Z:/doc/foo.html的内容,而我需要file:///Z:/doc/foo.html#heading,其中#heading是TOC中单击的最后一项。如何使其包括URL字符串中的这些内部链接(不太确定它们的正确名称)?
在完美的世界中,QWebView会自动知道用户何时滚动到当前文档中的每个标题,并自动更新URL字符串。这将允许在不同会话之间实现几乎无缝阅读。我不指望它能够以这种方式工作,但这是可能的吗?

你找到解决方案了吗? - László Papp
1个回答

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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接