0

查看QtWebKit API中的信号,我没有找到任何对我来说似乎是我正在寻找的东西。

  • QWebView
    • linkClicked()似乎是最接近的,但重置按钮没有链接,并且绝对不指向 URL。
  • QWebPage
    • 我考虑了以下信号(根据它们的名称判断),但根据它们的描述,它们都不符合我的目的:contentsChanged(), contentsChanged(), contentsChanged(), selectionChanged()
  • QWebFrame
    • 它的任何信号都不符合我的目的。
  • QWebElement
    • 在这里,我可以看到如何获取表示按钮的对象,但它没有任何信号。

我想点击重置按钮,以便在数据被清除之前将数据存储在表单中,以便以后恢复。

目前,我确实设法将按钮作为对象检索QWebElementCollectionQWebElement并且可以修改它们,但我不知道如何让它们在单击时发送信号或类似的东西。

// Get reset buttons.
QWebElementCollection inputResets = mainFrame()->documentElement().findAll("input[type=reset]");
inputResets += mainFrame()->documentElement().findAll("button[type=reset]");

// Change their text (just a test).
foreach(QWebElement element, inputResets)
{
    element.setPlainText("Worked!");
}
4

2 回答 2

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);
}
于 2012-07-28T00:12:44.323 回答
0

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

于 2015-06-25T23:04:04.440 回答