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