QtWebkit 解析事件调度程序

发布于 2024-10-22 11:15:23 字数 625 浏览 15 评论 0原文

我最近在玩 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++ 专业人士还很远,我真诚地希望我错过了一些东西,你们可以帮助我:)

提前致谢 蒂莫

i'm playing around with QtWebkit lately and i was wondering if it is possible to resolve the element displayed in the QWebView which is responsible for an event, e.g. a MouseEvent.

I've installed an EventFilter function at the WebView Object with a function like this:

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;
}

Is there any way to get a reference to the clicked element that is displayed in the QWebView? As far as i can tell, the passed QObject equals the WebView object and the event doesn't seem to hold reference to its dispatcher.

Since i'm far away from beeing a c++ professional i sincerely hope i missed something and you guys can help me out :)

Thanks in advance
Timo

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不疑不惑不回忆 2024-10-29 11:15:23

我相信你可以做的是:

  1. 将对象参数转换为 QWebView
  2. 通过 vebView 在鼠标下获取 QWebFrame ->page()->frameAt() 方法
  3. 使用 hitTestContent返回框架的 方法用于检测给定鼠标位置的元素

下面是一个示例:

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;
}

希望这有帮助,问候

I believe what you could do is:

  1. cast object parameter to QWebView
  2. get QWebFrame under mouse via vebView->page()->frameAt() method
  3. use hitTestContent method of the returned frame to detect the element for the given mouse position

Below is an example:

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;
}

hope this helps, regards

自由如风 2024-10-29 11:15:23

使用 qobject_cast 而不是 dynamic_cast

Use qobject_cast instead of dynamic_cast.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文