Qt获取键盘按键ctrl和alt以及shift按键按下和松开

这篇具有很好参考价值的文章主要介绍了Qt获取键盘按键ctrl和alt以及shift按键按下和松开。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

.h文件中定义

/** 设置键盘按键状态 */
typedef enum
{
    KEY_STATE_Release = 0,   // 键盘按键状态Release
    KEY_STATE_Press,    // 键盘按键状态Press
}E_KEY_STATE;

E_KEY_STATE alt_key;
E_KEY_STATE ctrl_key;
E_KEY_STATE shift_key;
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);

这里主要为了获取按键ctrl和alt以及shift按键按下和松开来达到对QTableWidget中的内容进行多选

//按键按下
void record::keyPressEvent(QKeyEvent *event)
{
    switch(event->key())
    {
        case Qt::Key_Alt:
            alt_key = KEY_STATE_Press;
            break;
        case Qt::Key_Control:
            ctrl_key = KEY_STATE_Press;
            break;

        case Qt::Key_Shift:
            shift_key = KEY_STATE_Press;
            break;
    }

    if((alt_key == KEY_STATE_Press && ctrl_key == KEY_STATE_Press) ||  shift_key == KEY_STATE_Press)
    {
        QList<QTableWidgetItem*> items1 = ui->tableWidget->selectedItems();
        if(!items1.isEmpty())
        {
            int count = items1.count();//获取该行的成员数
            int row = ui->tableWidget->row(items1.at(0));// 获取该行的行号
            
            for ( int i=0; i!=tabrow_nuamber.size(); ++i )
            {
                if ( tabrow_nuamber.at(i) == row )
                {
                    tabrow_nuamber.removeAt(i);
                    for(int t =0;t<count;t++)
                    {
                        QTableWidgetItem *item = items1.at(t);  //该行列的item
                        if(t == 1)
                        {
                            item->setText(" ");
                        }
                        item->setBackgroundColor(QColor(255,255,255));
                    }
                    return ;
                }
            }
            tabrow_nuamber.append(row);
            for(int i =0;i<count;i++)
            {
                QTableWidgetItem *item = items1.at(i);  //该行列的item
                item->setBackgroundColor(QColor(100,100,100));
                if(i == 1)
                {
                     item->setText("*");
                }
            }
            return ;
        }
    }
}
//按键松开
void record::keyReleaseEvent(QKeyEvent *event)
{
    switch(event->key())
    {
        case Qt::Key_Alt:
            alt_key = KEY_STATE_Release;
            break;
        case Qt::Key_Control:
            ctrl_key = KEY_STATE_Release;
            break;
        case Qt::Key_Shift:
            shift_key = KEY_STATE_Release;
            break;
    }
}

但是这引入了一个问题,那就是当前界面想要使用按键捕获,就需要在切换到该界面时调用:
grabKeyboard()
那么在这个例子中就是调用my_record->grabKeyboard();到达获取键盘的按键捕获
但是如果这个界面获取键盘捕获没有释放会导致其他界面不能正常获取键盘,不能输入
所以在切换至其他界面时需要调用my_record->releaseKeyboard();释放键盘捕获

但是使用grabKeyboard() 发现如果界面切换比较多,会导致有的界面不能正常通过键盘输入
所以最好的办法就是将keyReleaseEvent和keyPressEvent在主界面定义,然后发出信号在子界面进行处理文章来源地址https://www.toymoban.com/news/detail-529294.html

到了这里,关于Qt获取键盘按键ctrl和alt以及shift按键按下和松开的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CH9350L键盘转串口IC,实现按下对应键盘按键输出对应的串口值

    具体应用电路见下图。 电路设计均采用的是立创EDA设计,已在立创开源平台开源该项目。见链接: 键盘转串口模块 - 嘉立创EDA开源硬件平台 数据手册见下面的百度网盘: 链接:https://pan.baidu.com/s/1r5C8RVoCe7bKst1fyaMe8A?pwd=4wru 提取码:4wru         这里选择的是5V供电,根据数

    2024年02月09日
    浏览(36)
  • Qt中无法捕获键盘按下操作的解决方法

    上述代码片段是控制窗口中 pushButton 按钮实现 上下左右移动的功能 ;即,当按下键盘中的W、S、A、D或者↑、↓、←、→键时,pushButton按钮可以随之进行位置变化;运行时发现,按下W、S、A、D可以实现所需功能,而按下↑、↓、←、→键时,按钮没有反应; 这是由于没有捕

    2024年02月13日
    浏览(42)
  • C51单片机-按下K0至K15,显示按键标号(4x4矩阵键盘电路,1个数码管)

    keil uVision4界面: proteus仿真界面:

    2024年02月04日
    浏览(47)
  • js获取键盘按键事件、判断键盘按键事件、调用键盘按键事件

    第一:获取键盘按键事件 第二:判断键盘按键事件 第三:调用键盘按键事件

    2024年02月11日
    浏览(53)
  • C# 全局响应Ctrl+Alt+鼠标右键

    某些应用,我们希望全局自定义热键。按键少了会和别的应用程序冲突,按键多了可定用户操作不变。因此我计划左手用Ctrl+Alt,右手用鼠标右键呼出我自定义的菜单。 我使用键盘和鼠标事件进行简单测试(Ctrl+鼠标右键),发现并不能成功。 因此只好使用“钩子”。  通过

    2024年02月15日
    浏览(39)
  • 电脑按ctrl+alt+del键没反应?

    如果电脑出现黑屏,一般是按ctrl+alt+delete键就可以解决问题,但是有不少小伙伴发现自己的电脑按ctrl+alt+delete三个键却没有反应,这是怎么回事? 出现这种情况基本上有4个原因: 1、电脑意外删除或损坏系统文件。然后你需要重新安装系统。 2、可能是安装的软件或插件与系

    2024年02月16日
    浏览(47)
  • CLion用ctrl+鼠标改变代码字体大小&&代码自动对齐快捷键(Ctrl +a、Ctrl + alt + I )

            在使用CLion编写代码时,有时候我们需要查看代码的全部内容,但屏幕显示的区域有限,不能一次性显示所有的代码。这时可以通过缩放代码字体的方式来查看全部代码。         CLion提供了一种快捷键,即按住 Ctrl 键并滚动鼠标滚轮,可以快速改变代码字体的

    2024年02月04日
    浏览(103)
  • Pygame中获取键盘按键的方法

    在Pygame中,将用户对游戏的操作叫做“事件”。键盘按键是一种事件,鼠标点击和游戏手柄的输入也是一种事件。在Pygame的子模块locals中,对这些事件进行了定义。当用户通过键盘、鼠标或者游戏手柄对游戏进行操作后,产生的这些事件都会被放在队列中。 在Pygame中获取按键

    2024年02月15日
    浏览(82)
  • Qt键盘事件处理——如何在Qt中监听按键操作

    Qt键盘事件处理——如何在Qt中监听按键操作 在Qt中,使用键盘是很常见的操作。如何通过代码来实现键盘事件的监听和响应呢?本文将详细介绍在Qt中如何监听键盘事件,并实现一些基本的按键操作。 在Qt中,所有的键盘事件都被封装成了一个QKeyEvent对象,我们只需要在需要

    2024年02月11日
    浏览(41)
  • Qt键盘事件常用按键key值整理

    Qt文档中给了个上百个按键,太多了,所以这里整理了Qt中键盘事件常用的一些按键,若各位想找的按键在这里找不到的话,可以自行在Qt文档中再查看 键名 十六进制值 按键 Qt::Key_Escape 0x01000000 Esc  Qt::Key_Tab 0x01000001 Tab  Qt::Key_Backtab 0x01000002 Tab  Qt::Key_Backspace 0x01000003 退格 Q

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包