gpt4 book ai didi

c++ - QtWebkit 解析事件调度器

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:59 25 4
gpt4 key购买 nike

我最近在玩 QtWebkit,我想知道是否有可能解析 QWebView 中显示的负责事件的元素,例如鼠标事件。

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

提前致谢蒂莫

最佳答案

我相信你能做的是:

  1. 将对象参数转换到QWebView
  2. 通过vebView->page()->frameAt()获取鼠标下的QWebFrame方法
  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;
}

希望这对你有帮助,问候

关于c++ - QtWebkit 解析事件调度器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com