qevent accept()和ignore() 函數

這兩個函數accept/ignore的功能,只是設定標記,



一些事件類型可以被傳遞。這意味着假如目標對象不處理一個事件,Qt會試着尋找另外的事件接收者。用新的目標來調用QApplication::notify()。舉例來講,key事件是傳遞的,假如擁有焦點的Widget不處理特定鍵,Qt會分發相同的事件給父widget,然後是父親的父親,直到最頂層widget。
那麼何時接收該事件,何時忽略呢?

通過accept( )函數和ignore( )函數。

可被傳遞的事件有一個accept()函數和一個ignore()函數,你可以用它們來告訴Qt,你“接收”或是 “忽略”這個事件。假如事件handler調用accept(),這個事件將不會再被傳遞。假如事件handler調用 ignore(),Qt會試着查找另外的事件接收者。 像大多數的開發者一樣,你可能不會被調用accept()或是ignore()所煩惱。缺省情況下是“接收”,在 QWidget中的缺省實現是調用ignore(),假如你希望接收事件,你需要做的是重新實現事件handler,避免 調用QWidget的實現。假如你想“忽略”事件,只需簡單地傳遞它到QWidget的實現。下面的代碼演示了這一點:
void MyFancyWidget::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Key_Escape) {
doEscape();
} else {
QWidget::keyPressEvent(event);
}
}
在上面的例子裏,假如用戶按了"ESC"鍵,我們會調用doEscape()並且事件被“接收”了(這是缺省的情況), 事件不會被傳遞到父widget,假如用戶按了別的鍵,則調用QWidget的缺省實現。
void QWidget::keyPressEvent(QKeyEvent *event)
{
event->ignore();
}
應該感謝ignore(),事件會被傳遞到父widget中去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章