Как обнаружить нажатие на кнопку сброса формы из QtWebKit?

Глядя на сигналы в QtWebKit API, я не нашел ничего, что могло бы показаться мне тем, что я ищу.

  • QWebView
    • linkClicked() seems to be the closest, but a reset button is no link, and definitely does not point to an URL.
  • QWebPage
    • I considered the following signals (judging by their name), but according to their description none of them match my purpose either: contentsChanged(), contentsChanged(), contentsChanged(), selectionChanged().
  • QWebFrame
    • None of its signals matches my purpose.
  • QWebElement
    • Here I can see how to get an object representing the button(s), but it has no signals whatsoever.

Я хочу поймать щелчок на кнопке сброса, чтобы сохранить данные в форме до того, как она будет очищена, чтобы ее можно было восстановить позже.

На данный момент мне удалось получить кнопки как QWebElementCollection из QWebElement объектов, и я могу изменить их, но я не знаю, как заставить их отправлять сигнал при нажатии или что-то подобное.

// 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!");
}

person Gallaecio    schedule 27.07.2012    source источник


Ответы (2)


Ну, у меня это работает, хотя я не думаю, что это лучший подход:

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);
}
person Gallaecio    schedule 28.07.2012

Вероятно, вы можете сделать это с помощью Qt WebKit Bridge.

person bendiy    schedule 25.06.2015