Qt 中KeyPressEvent獲取不到Key_Space等事件


Qt 中KeyPressEvent獲取不到Key_Space等事件,有2種方式:

  1. 類的構造函數中增加setFocusPolicy;
  2. 通過eventFilter()過濾事件。

一、原因

QT類獲取鍵盤焦點時才可以獲取事件,當頁面布局復雜時,焦點可能不在該類中。

二、類構造函數中添加setFocusPolicy

進入界面時需點擊一下界面,在簡單界面(如裁切圖片)可以應用。

//在qt類構造函數中加入
setFocusPolicy(Qt::StrongFocus);

//在void keyPressEvent(QKeyEvent *e)中加入
if (e->key() == Qt::Key_Space)
{
    Doing();
}

三、通過eventFilter()過濾事件

//在qt類構造函數中加入
setFocusPolicy(Qt::StrongFocus);
installEventFilter(this);
 
//在bool eventFilter(QObject* object, QEvent* event)加入
if (event->type() == QEvent::KeyPress)
{
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
    if (keyEvent->key() == Qt::Key_Space)
    {
       Doing();
    }
}
return false;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM