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

おそらく、これはQt WebKit Bridgeで実現できます。

于 2015-06-25T23:04:04.440 に答える
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 に答える