2012-07-27 73 views
0

看着QtWebKit API中的信号,我没有发现任何在我看来是我正在寻找的东西。如何检测QtWebKit中的窗体重置按钮的点击?

  • QWebView
    • linkClicked()似乎是最接近的,但重置按钮没有联系的,绝对没有指向的URL。
  • QWebPage
    • 我认为以下信号(他们的名字判断),但根据他们的描述他们都不符合我的目的之一:contentsChanged()contentsChanged()contentsChanged()selectionChanged()
  • QWebFrame
    • 其信号都没有我的目的相匹配。
  • QWebElement
    • 这里我可以看到如何让代表按钮(一个或多个)的对象,但无论如何没有信号。

我要赶在复位按钮点击,以便将数据存储在表前,它被清除,所以它可以在以后恢复。现在,我确实设法检索按钮作为的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!"); 
} 

回答

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); 
}