QtWebkit解析事件调度程序

时间:2011-03-15 15:13:47

标签: c++ qt webkit qtwebkit

我最近正在玩QtWebkit,我想知道是否有可能解决QWebView中显示的负责事件的元素,例如:一个MouseEvent。

我在WebView对象上安装了一个EventFilter函数,其函数如下:

bool WebKitManager::eventFilter(QObject *obj, QEvent *event)
{
    if(event->type() == QEvent::MouseButtonRelease)
    {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        if(mouseEvent->button() == Qt::LeftButton)
        {
            // what now?!
        }

    }
    return false;
}

有没有办法获得对QWebView中显示的被点击元素的引用?据我所知,传递的QObject等于WebView对象,并且该事件似乎没有引用其调度程序。

由于我远没有成为一名c ++专业人士,我真诚地希望我错过了一些东西,你们可以帮助我:)

提前致谢 蒂莫

2 个答案:

答案 0 :(得分:5)

我相信你能做的是:

  1. 将对象参数转换为QWebView
  2. 通过vebView->page()->frameAt()方法
  3. 在鼠标下获取QWebFrame
  4. 使用返回帧的hitTestContent方法来检测给定鼠标位置的元素
  5. 以下是一个例子:

    bool WebKitManager::eventFilter(QObject *object, QEvent *event)
    {
        if (event->type() == QEvent::MouseButtonRelease)
        {
            QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
            if (mouseEvent->button() == Qt::LeftButton)
            {
                QWebView *view = dynamic_cast<QWebView*>(object);
    
                QPoint pos = view->mapFromGlobal(mouseEvent->globalPos());
                qDebug() << view->url().toString() << " clicked at x:" << pos.x() << " y:" << pos.y();
    
                QWebFrame *frame = view->page()->frameAt(mouseEvent->pos());
                if (frame!=NULL)
                {
                    QWebHitTestResult hitTestResult = frame->hitTestContent(pos);
                    qDebug() << "element" << hitTestResult.element().localName();
                }
            }
        }
        return false;
    }
    

    希望这有帮助,尊重

答案 1 :(得分:1)

使用qobject_cast代替dynamic_cast

相关问题