首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWebEngine:如何获取属性值?

QWebEngine:如何获取属性值?
EN

Stack Overflow用户
提问于 2016-01-09 21:08:18
回答 5查看 3.7K关注 0票数 3

我想将用QWebView编写的项目重写为QWebEngineView,但我不知道如何获取属性值并将其分配给C++变量。我想我应该使用QWebEnginePage::runJavaScript函数。但我不知道该怎么做。

例如,当我试图在控制台中显示元素的值时,我这样做了:

代码语言:javascript
复制
web->page()->runJavaScript("document.getElementById(\"login\").getAttribute(\"va‌​lue\")", []
(QVariant result)->void {
    qDebug()<<result.toString();
});

但它什么也不显示。

EN

回答 5

Stack Overflow用户

发布于 2016-01-11 14:37:13

我相信您可以通过将插槽连接到QWebViewloadFinished信号来获取元素的值。代码应该类似于下面的内容。

代码语言:javascript
复制
void WebView::onPageLoadFinished(bool status)
{
    if(status)
    {
        QVariant value;
        QWebFrame* frame = this->page()->currentFrame();
        if (frame!=NULL)
        {
            QWebElement element = frame->findFirstElement("input[id=login]");
            value = element.attribute("value");
        }
        //In your case you can set a class variable instead of local variable value
    }
}

这个方法是干净的,你甚至可以在插槽的开头添加一个url检查,只有当信号来自你感兴趣的url时才能继续。

编辑:我刚刚重读了你的问题,发现你想用QWebEngine实现它。我不确定在那里能不能做到。根据this页面,您不能访问内部元素。我很想知道这附近有没有工作。

票数 0
EN

Stack Overflow用户

发布于 2018-12-12 06:05:02

runJavaScript肯定会做到这一点:下面是一个使用纯Javascript与名为“email”的字段进行交互的功能示例:

代码语言:javascript
复制
// This will set the value
this->_view->page()->runJavaScript(
    "document.querySelector('input[name=\"email\"]').value = \"JKLJKLJKL\";"
);

// This will retrieve the value
this->_view->page()->runJavaScript(
    "document.querySelector('input[name=\"email\"]').value;",
    [](const QVariant &result){
        qDebug() << "Value is: " << result.toString() << endl;
    }
);

请记住,QVariant的作用域仅限于回调,如果需要在函数外部使用返回值,则需要传递一个变量,该变量将一直存在,直到在[]中调用回调。

票数 0
EN

Stack Overflow用户

发布于 2016-01-26 21:24:20

在JS中有对DOM属性/属性的直接访问:

代码语言:javascript
复制
document.getElementById("login").va‌​lue

另外,我建议使用jQuery (看看fancybrowser示例)。设置/获取登录输入的取值代码为:

代码语言:javascript
复制
if( qt.jQuery( 'input#login' ).length ) // can be omitted if you are sure that DOM element is ready 
{
    qt.jQuery( 'input#login' ).attr( 'value', currentUserName ); //-- set value
    return qt.jQuery( 'input#login' ).attr( 'value' ); //-- get
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34693830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档