我是 Qt 的新手,并試圖實作一個非常簡單的“按鍵”事件方法,但它似乎沒有正確注冊。
這是我的頭檔案中的宣告:
#include <Qt>
#include <QKeyEvent>
class MainWindow : public QMainWindow
{
Q_OBJECT
protected:
void KeyPressEvent(QKeyEvent* event);
};
這是實作:
void MainWindow::KeyPressEvent(QKeyEvent *event)
{
qDebug() << "Registered Key Press";
}
這幾乎正??是我在網上看到的示例的樣子,所以除非我缺少某些連接,否則不確定問題是什么。
uj5u.com熱心網友回復:
正如您所說,這幾乎與示例所顯示的完全一樣。他們應該展示
void keyPressEvent(QKeyEvent* event) override;
請參閱QWidget::keyPressEvent。請注意,C 區分大小寫(K -> k)。
另外,我添加了 override 關鍵字 - 如果您嘗試覆寫編譯器不知道的函式,編譯器會告訴您!
上述鏈接檔案中包含其他注意事項:
確保以
setFocusPolicy適當的政策致電;另請注意,子小部件可以“吞下”事件。這意味著如果您的主視窗有任何子視窗;并且按鍵發生在孩子內部,孩子可以說“我處理此事件,無需將其傳遞給我的父母”。那么你
MainWindow::keyPressEvent也不會被呼叫;QKeyEvent請參閱檔案中的相應注釋;MainWindow要點:您處理的任何子視窗keyPressEvent都必須ignore()對事件進行,以便它傳播到父類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469021.html
