`
qimo601
  • 浏览: 3446314 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Qt获取组合键

    博客分类:
  • Qt
阅读更多

 

CTRL+Enter发送信息的实现

      在现在的即时聊天程序中,一般都设置有快捷键来实现一些常用的功能,类似QQ可以用CTRL+Enter来实现信息的发送。

      在QT4中,所有的事件都继承与QEvent这个类,以下是用QEvent来实现快捷键的功能。

      首先所有QT类的基类QObject有一个成员函数installEventFilter,这个函数是用来将一个事件处理器和该QObject绑定起来,所以就有了我下面的想法。

      首先在chat类定义一个eventFilter,该函数是一个虚函数,可以由子类进行更改。所以声明eventFilter如下:

virtual bool eventFilter(QObject *obj, QEvent *e);

      看了下QT文档对于这个函数的声明的解释,大概意思就是如果你要过滤某个事件就返回false,如果要使用某个事件就返回true。

      我想在这个函数中加入对Enter键和Ctrl+Enter组合键的判断,具体查看QKeyEvent类的文档

      QKeyEvent类中有函数key和modifier,key函数返回的是发生时间的按键值,modifier返回的而是修饰键,QT所支持的修饰键如下:

Constant                         Value               Description

Qt::NoModifier                 0x00000000       No modifier key is pressed.

Qt::ShiftModifier              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.

      所以可以重写eventFilter函数来实现快捷键的功能,可以根据QKeyEvent的key和modifire来分别是Enter还是Ctrl+enter被按下。

      重写eventFilter的函数如下:

 

bool Window::eventFilter(QObject *obj, QEvent *e)
{
    Q_ASSERT(obj == ui.inputMsgEdit);
 
    if (e->type() == QEvent::KeyPress)
    {
        QKeyEvent *event = static_cast<QKeyEvent*>(e);
        if (event->key() == Qt::Key_Return && (event->modifiers() & Qt::ControlModifier))
        {
            sendMessage();
            return true;
        }
    }
    return false;
}

 然后把这个过滤器用installEventFilter函数安装在聊天窗口的输入框上(QTextEdit),这样就实现快捷键的功能了。

三键组合Shift + Ctrl + A的实现

      只要在窗体中相应keyPressEvent事件函数即可。

 

void Window::keyPressEvent(QKeyEvent *e)
{
    if (e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier) && e->key() == Qt::Key_A)
    {
        //pressed
    }
}

 键盘按住Ctrl键 + 鼠标左键的实现

      在窗体中相应mousePressEvent事件函数在其中检测Ctrl键是否按住即可。

 

void Window::mousePressEvent(QMouseEvent *e)
{
    // 获取鼠标在点击窗体上的坐标
    QPoint pos = e->pos();
    if (e->button() == LeftButton)
    {
        if ( QApplication::keyboardModifiers () == Qt::ControlModifier)
        {
            //pressed
        }
    }
}
分享到:
评论

相关推荐

    QT Linux系统捕获键盘事件,抓取键盘,无论焦点是否在此界面或进程上

    Linux系统捕获键盘事件,抓取键盘事件,无论焦点是否在此界面或进程上。类似,windows下hook的作用,可以捕获事件。...再加上定时器,可以判断组合键,不是简单的shift+A, 可以实现A+B组合键。QT程序,可以直接运行。

    linux下QT编程键盘键值捕获

    - **键组合的处理**:如果需要处理多个键的组合(如Ctrl+V),可以使用`k-&gt;modifiers()`函数获取当前的修饰键状态。 - **键盘布局支持**:对于不同语言环境下的键盘布局,QT也提供了相应的支持,可以通过设置不同的...

    QT 键盘监听(重写监听事件)

    // keyEvent-&gt;modifiers()可以获取到当前的键盘修饰键状态,如Ctrl、Shift等 // 在这里添加你的处理逻辑 } return QObject::eventFilter(obj, event); // 调用基类的eventFilter,让其他未处理的事件继续传递 }...

    【Qt】QT鼠标和键盘事件.rar

    2. **组合键(Modifier Keys)**:如Ctrl、Shift、Alt等,可以通过`event-&gt;modifiers()`获取当前按下的是哪些组合键。 3. **文本输入事件**:对于需要处理文本输入的控件,如`QLineEdit`或`QTextEdit`,还有`...

    qt键盘映射和焦点移动

    当用户按下或释放键盘键时,Qt会生成相应的QKeyEvent对象,并将其传递给事件循环。开发者可以通过重写QObject或QWidget的eventFilter()函数来捕获这些事件,以便根据需要自定义键盘行为。例如,你可以定义特定的按键...

    windows获取游戏手柄按键

    本篇文章将详细探讨如何使用QT在Windows环境下获取游戏手柄的按键信息。 首先,为了在QT应用中处理游戏手柄输入,我们需要引入必要的库。在QT中,可以使用QGamepad模块来访问游戏手柄设备。在你的QT项目文件(.pro...

    qt 界面元素,学习qt好的实例,可以提升QT技能并用到实际产品上

    通过研究这些实例,开发者不仅能掌握基本的QT组件用法,还能学习到如何将它们组合起来,创建出具有复杂交互的用户界面。实践是提升编程技能的关键,因此,亲自尝试这些例子并理解其工作原理将对提高QT开发能力...

    QT实现农历转换(C++)

    天干地支是中国传统的纪年、纪月、纪日方式,由10个天干(甲、乙、丙、丁、戊、己、庚、辛、壬、癸)和12个地支(子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥)循环组合而成。 节气是中国农历的一部分,分为二...

    屏蔽系统热键ctrl+alt+delete

    在IT领域,尤其是在软件开发中,有时需要对特定的系统功能键进行控制,例如屏蔽`Ctrl+Alt+Delete`这样的组合键。这个操作通常在特殊的应用场景下进行,比如游戏或者安全相关的应用程序,以防止用户意外中断或退出...

    qt6单元格合并WidgetTableDemo

    使用`QTableWidgetItem`对象来设置或获取单元格内容,通过`QTableWidget::setItem(int row, int column, QTableWidgetItem *item)`方法。 4. **单元格合并**: 在Qt中,合并单元格并不像其他一些编程环境那样直接...

    QT5.9入门例程

    Qt的元对象系统(Meta-Object System)允许在运行时动态获取类信息,如属性、信号和槽,使得编写反射和脚本绑定代码变得简单。 13. **调试与测试**: Qt Creator内置了调试器,可以方便地调试代码。同时,Qt Test...

    Qt下的虚拟键盘输入法

    当用户在虚拟键盘上输入拼音时,程序会查询数据库,找出可能的汉字组合,然后在候选窗口中显示。这种实现方式需要对中文字符集、拼音规则以及数据库操作有深入理解。 在Qt Creator中,开发者可以使用QML(Qt Meta ...

    QT输入法(智能拼音,笔画,手写)

    QT输入法是一款专为QT平台设计的中文输入工具,它提供了丰富的输入方式,包括智能...其智能拼音、笔画输入和手写识别的组合,覆盖了各类用户群体的需求,加上对QT平台的良好支持,使得它在开发和测试环境中尤为实用。

    QT5实现获取屏幕坐标,按输入时间实现鼠标连点,系统键盘控制

    例如,监听`Ctrl+Q`组合键退出程序: ```cpp connect(ui-&gt;quitAction, &QAction::triggered, qApp, &QApplication::quit); ui-&gt;quitAction-&gt;setShortcut(QKeySequence("Ctrl+Q")); ``` 此外,QT5还提供了`...

    Qt实现截屏功能源码

    - **监听快捷键**:在`mainwindow.cpp`中重载`keyPressEvent()`函数,检测Ctrl+Alt+A组合键。当按下此组合键时,启动截屏操作。 5. **显示截图**: - 创建一个`QDialog`子类,如`ScreenshotDialog`,用于显示截图...

    qt 屏幕截屏 window linux

    在Qt中,我们可以使用`QScreen`类来获取系统屏幕的信息,如分辨率和设备像素比。要实现屏幕截图,首先需要获取主屏幕或特定显示器的实例,然后调用`grabWindow()`或`grabWidget()`方法来捕获窗口或控件的图像。例如...

    Qt使用开发板上的按键-思维导图-学习笔记-基于正点原子阿尔法开发板

    该按键在普通键盘上找不到,但某些笔记本电脑可以通过 FN + F6 等组合键模拟。在 Windows/Ubuntu 上使用 Key_Down 进行测试,而在开发板上则使用 KEY0 按键。为了监测 KEY0,开发者可以使用 C 语言创建线程,或重写...

    Qt-有趣的爬虫

    将快捷键与槽函数关联,当用户按下特定组合键时,相应功能就会被触发。在这个项目中,`Ctrl+Alt+Q`被设定为退出程序的快捷键。实现全局快捷键通常需要在事件过滤器(`QEventFilter`)中处理,以便在任何焦点窗口下都...

    Qt5.3截图源代码

    1. **获取屏幕图像**:使用QApplication的`allWidgets()`方法获取所有顶级窗口,然后遍历这些窗口,通过`grabWindow()`或`grabWidget()`方法捕获每个窗口的图像。`grabWindow()`用于截取整个窗口,包括边框和标题栏...

    qt for txt

    通过重载`QTextEdit`的`keyPressEvent`等事件处理函数,可以实现对键盘输入的监听,例如,当用户按下Ctrl+S组合键时,我们可以触发保存文件的操作。同时,还可以添加对鼠标点击、拖拽等其他事件的处理,增强应用的...

Global site tag (gtag.js) - Google Analytics