ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT键盘消息

2022-09-08 21:03:17  阅读:194  来源: 互联网

标签:strMessage modifiers QT Key 键盘 消息 key event Qt


相对鼠标消息, 键盘消息显得要容易些.
主要是继承并实现这两个函数

virtual void keyReleaseEvent(QKeyEvent * event);
virtual void keyPressEvent(QKeyEvent * event);  

我在这两个函数里加了些代码,让用户的按键状态在状态栏中显示出来


void MainWindow::keyPressEvent(QKeyEvent * event)
{
    QString strMessage = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
    strMessage += " keyPressEvent ";

    if (event->modifiers() & Qt::ControlModifier)
    {
        strMessage += " ctrl";
    }

    if (event->modifiers() & Qt::ShiftModifier)
    {
        strMessage += " shift";
    }

    if (event->modifiers() & Qt::AltModifier)
    {
        strMessage += " alt";
    }


    qDebug() << hex << event->key() << endl;

    if ( (0 ==  event->key()) || ( Qt::Key_unknown == event->key()) || event->key() > Qt::Key_Escape)
    {
        strMessage += " no_key";
    }else
    {
        strMessage += " key=";
        strMessage += QChar(event->key());
    }

    ui->statusBar->showMessage(strMessage);
}

void MainWindow::keyReleaseEvent(QKeyEvent * event)
{
    QString strMessage = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
    strMessage  += " keyReleaseEvent ";

    if (event->modifiers() & Qt::ControlModifier)
    {
        strMessage += " ctrl";
    }

    if (event->modifiers() & Qt::ShiftModifier)
    {
        strMessage += " shift";
    }

    if (event->modifiers() & Qt::AltModifier)
    {
        strMessage += " alt";
    }


    qDebug() << hex << event->key() << endl;

    if ( (0 ==  event->key()) || ( Qt::Key_unknown == event->key()) || event->key() > Qt::Key_Escape )
    {
        strMessage += " no_key";
    }else
    {
        strMessage += " key=";
        strMessage += QChar(event->key());
    }


    ui->statusBar->showMessage(strMessage);
}

值得注意的是,假如我只按一个CTRL键,event->key()的值是1000021
按我的理解,event->key()应该是是0或者Qt::Key_unknown,表示没有键按下参考QT文档
int QKeyEvent::key() const

Returns the code of the key that was pressed or released. See Qt::Key for the list of keyboard codes. These codes are independent of the underlying window system. Note that this function does not distinguish between capital and non-capital letters, use the text() function (returning the Unicode text the key generated) for this purpose. A value of either 0 or Qt::Key_unknown means that the event is not the result of a known key; for example, it may be the result of a compose sequence, a keyboard macro, or due to key event compression.


最终,我觉得,如果event->key()的值大于0x1000000,就认为没有实际的键按下:

    if ( (0 ==  event->key()) || ( Qt::Key_unknown == event->key()) || event->key() > Qt::Key_Escape)
    {
        strMessage += " no_key";
    }else
    {
        strMessage += " key=";
        strMessage += QChar(event->key());
    }

Key_Escape的值定义如下:
Key_Escape = 0x01000000,                // misc keys

代码见: http://q1024.com/files/qt_window-master.zip 000700目录

标签:strMessage,modifiers,QT,Key,键盘,消息,key,event,Qt
来源: https://www.cnblogs.com/xingzaicpp/p/16670828.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有