如何检测来自QtWebKit的表单重置按钮的单击?

时间:2012-07-27 21:40:57

标签: qtwebkit

查看 QtWebKit API 中的信号,我找不到任何我认为正在寻找的东西。

  • QWebView
    • linkClicked()似乎是最接近的,但重置按钮不是链接,绝对不会指向网址。
  • QWebPage
    • 我考虑了以下信号(根据他们的名字判断),但根据他们的说明,他们中没有一个符合我的目的:contentsChanged()contentsChanged()contentsChanged(),{{1} }。
  • QWebFrame
    • 它的所有信号都不符合我的目的。
  • QWebElement
    • 在这里,我可以看到如何获得一个代表按钮的对象,但它没有任何信号。

我希望在重置按钮中点击一下,以便在清除之前将数据存储在表单中,以便以后可以恢复。

目前,我确实设法将按钮检索为selectionChanged()QWebElementCollection个对象,我可以修改它们,但我不知道如何让它们在点击时发送信号,或类似的东西。

QWebElement

2 个答案:

答案 0 :(得分:0)

嗯,我得到了它的工作,虽然我不认为这是最好的方法:

bool EventFilter::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());

            QWebFrame *frame = view->page()->frameAt(mouseEvent->pos());
            if (frame != NULL)
            {
                // Get the existing reset buttons.
                QWebElementCollection inputResets = frame->documentElement().findAll("input[type=reset]");
                inputResets += frame->documentElement().findAll("button[type=reset]");

                // Check if any of them is at the clicked position.
                foreach(QWebElement element, inputResets)
                {
                    if (element.geometry().contains(pos))
                    {
                        qDebug() << "Clicked element tag:" << element.localName();

                        return QObject::eventFilter(object, event);
                    }
                }
            }
        }
    }

    return QObject::eventFilter(object, event);
}

答案 1 :(得分:0)

您可以使用Qt WebKit Bridge完成此操作。