【问题标题】:Qt: Getting QWebview to return a complete URLQt:让 QWebview 返回一个完整的 URL
【发布时间】:2014-07-20 21:25:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 找到解决办法了吗?

标签: html qt url qwebview


【解决方案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。

【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2014-12-12
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多