我的应用程序中有一个类,它显示基于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字符串。这将允许在会话之间几乎无缝读取。我不希望它以这种方式工作,但这是否可能?
答案 0 :(得分:1)
这对我来说就像是一种魅力。
#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();
}
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。