【问题标题】:Get webview document title when HTML is loaded加载 HTML 时获取 webview 文档标题
【发布时间】:2014-11-18 17:10:31
【问题描述】:

我有以下 Qt webview:

QWebView *view = new QWebView();
view->load(QUrl("http://example.com"));

我想在加载完成后获取文档的标题,并用它来设置主窗口的标题。

我认为view->loadFinished() 返回true 如果页面已加载。

为了设置窗口标题,我使用webView->setWindowTitle(newTitle)。所以,我需要我想成为文档标题的 newTitle 变量。

我该怎么做?

【问题讨论】:

    标签: c++ qt webview


    【解决方案1】:

    QWebView::loadFinished 是一个信号。您可以订阅它以了解页面何时加载:

    connect(view, SIGNAL(loadFinished(bool)), this, SLOT(onLoaded()));
    

    要访问 HTML 标题,您可以使用 QWebView::title 属性。

    void onLoaded()
    {
        window->setWindowTitle(view->title());
    }
    

    而不是使用loadFinished,使用信号titleChanged(const QString& title) 将新标题应用到窗口可能更合适:

    connect(view, SIGNAL(titleChanged(QString)), this, SLOT(setWindowTitle(QString)));
    

    编辑:
    示例:

    QWebView* webView = new QWebView();
    connect(webView, SIGNAL(titleChanged(QString)), webView, SLOT(setWindowTitle(QString)));
    webView->load(QUrl("http://yahoo.com"));
    webView->show();
    

    【讨论】:

    • 我猜在connect 两行中都缺少括号(末尾为))。但是我收到以下错误:/main.cpp:...: error: 'connect' was not declared in this scope。我必须包含任何库吗?
    • 你从哪里打电话给connect?它是QObject 的静态方法。你也可以使用QObject::connect,但第三个参数应该是QWidget的后代。
    • 来自主文件 (main.cpp)。使用QObject::connect(view, SIGNAL(loadFinished(bool)), view, SLOT(onLoaded()));,我得到以下输出:QObject::connect: No such slot QWebView::onLoaded()。那么,如何正确使用connectQObject::connect呢?
    • 如果您将QWebView 显示为窗口,您可以使用第二个connectthis 替换为viewconnect(view, SIGNAL(titleChanged(QString)), view, SLOT(setWindowTitle(QString)));。否则将this 更改为webView,无论它是什么。这是关于信号和插槽的documentation
    • 是的,窗口实际上是webview。如何从 webview 中获取真实的文档标题(<title>foo</title>)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多