我最近正在玩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 ++专业人士,我真诚地希望我错过了一些东西,你们可以帮助我:)
提前致谢 蒂莫
答案 0 :(得分: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
。