Qt事件系統之三:鍵盤事件


QKeyEvent類用來描述一個鍵盤事件。當鍵盤按鍵被按下或者被釋放時,鍵盤事件便會被發送給擁有鍵盤輸人焦點的部件。

QKeyEvent的key()函數可以獲取具體的按鍵,對於Qt中給定的所有按鍵,可以在幫助中查看Qt: :Key關鍵字。需要特別說明的是,回車鍵在這里是Qt::Key_Return;鍵盤上的一些修飾鍵,比如Ctrl和Shift等, 這里需要使用QKeyEvent的modifiers()函數來獲取,可以在幫助中使用Qt:: KeyboardModifier關鍵字來査看所有的修飾鍵。

QKeyEvent有兩個鍵盤事件成員函數:

void QWidget::keyPressEvent(QKeyEvent *event)   //鍵盤按下事件
void QWidget::keyReleaseEvent(QKeyEvent *event) //鍵盤松開事件

這兩個基本上能夠滿足一般的需求了,但是前提是已經獲得焦點的控件已經獲取焦點。具體怎么使用呢?

在頭文件.h中進行聲明:

protected:
    void keyPressEvent(QKeyEvent *event); //鍵盤按下事件
    void keyReleaseEvent(QKeyEvent *event); //鍵盤松開事件

在.cpp中進行實現相應的功能:

//鍵盤按下事件
void Widget::keyPressEvent(QKeyEvent * event)
{
    switch (event->key())
    {
        //ESC鍵
        case Qt::Key_Escape:
            qDebug() <<"ESC";
        break;
        //回車鍵
        case Qt::Key_Return:
            qDebug() <<"Enter";
        break;
        //退格鍵
        case Qt::Key_Backspace:
            qDebug() <<"Back";
        break;
        //空格鍵
        case Qt::Key_Space:
            qDebug() <<"Space";
        break;
        //F1鍵
        case Qt::Key_F1:
            qDebug() <<"F1";
        break;
    }

    //先檢測Ctrl鍵是否按下
    if(event->modifiers() == Qt::ControlModifier)
    {
        //如果是,那么再檢測M鍵是否按下
        if(event->key() == Qt::Key_M)
        {
            //按下則使窗口最大化
            this->setWindowState(Qt::WindowMaximized);
        }
    }
}

//鍵盤釋放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
    //方向UP鍵
    if(event->key() == Qt::Key_Up)
    {
        qDebug() << "release: "<< "up";
    }
}

分別按下ESC、Enter、Backspace、Space、F1鍵,“應用程序輸出”窗口輸出如下,另外按Ctrl+M鍵也能使窗口最大化:

ESC
Enter
Back
Space
F1
release:  up

下表列出了所有的修飾鍵:

Constant Value Description
Qt::NoModifier 0x00000000 No modifier key is pressed.
Qt::NoModifier 0x02000000 A Shift key on the keyboard is pressed.
Qt::ControlModifier 0x04000000 A Ctrl key on the keyboard is pressed.
Qt::AltModifier 0x08000000 An Alt key on the keyboard is pressed.
Qt::MetaModifier 0x10000000 A Meta key on the keyboard is pressed.
Qt::KeypadModifier 0x20000000 A keypad button is pressed.
Qt::GroupSwitchModifier 0x40000000 X11 only. A Mode_switch key on the keyboard is pressed.


免責聲明!

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



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