【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数

QKeyEvent及其相关的处理函数,比如QKeyPressEvent、QKeyReleaseEvent()等在QtGui编程中非常常用,尤其是需要借助标准键盘的编码来实现一些自定义功能的时候。

这算是QtGui编程中非常基础的东西,但如果事先没仔细了解手册中关于这一部分的介绍的话,还是有不少坑的。

为什么想起来写这个呢?之前的一个项目用了使用标准键盘芯片做的面板,但有一部分按键的key()是重复的,以前在Linux-Arm中底层编码传递上的键值在抛出QKeyEvent事件时做了处理,所以没有重复键值,因此这次是在Windows系统下编程,就有点想当然了,当发现键值重复时总是认为键盘硬件可能出了问题。

直到专门做了一个键值检测程序,在Win7上运行发现使用key()时,比如左右shift键的键值是一样的,但是看了下手册,它们的nativescancode()却是不一样的,于是就采用nativescancode()来区分不同的按键,果然是可以的。

这也说明,有空要多看下手册,多做点实例程序。

问题一:

使用QKeyEvent的e->key()来获取键值

void Widget::keyPressEvent(QKeyEvent *e)
{
    int key = e->key();
    qDebug()<<key;
}

但键盘上左右功能键,获取的键码是一样的,比如左右shift键、左右ctrl键以及左右alt键,编码一样,如何区分?

解决:

如果是在Windows/Linux系统中,请使用QKeyEvent::nativescancode()来区分键值,这样就是唯一的;

但是这个函数在MacOS下不能用。

转载于:https://www.cnblogs.com/dengwenwu/p/6954200.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是QtQListWidget控件的一些常见方法和事件及其对应的函数,以及简要的注释: 1.添加条目: ```c++ void QListWidget::addItem(QListWidgetItem *item); ``` 向QListWidget添加一个条目,参数item为要添加的QListWidgetItem对象。 2.插入条目: ```c++ void QListWidget::insertItem(int row, QListWidgetItem *item); ``` 在指定位置插入一个条目,参数row为插入的位置,item为要插入的QListWidgetItem对象。 3.移除条目: ```c++ void QListWidget::takeItem(int row); ``` 移除指定位置的条目,参数row为要移除的条目的位置。 4.清除所有条目: ```c++ void QListWidget::clear(); ``` 清除QListWidget的所有条目。 5.获取当前选的条目: ```c++ QListWidgetItem *QListWidget::currentItem() const; ``` 返回当前选的条目,如果没有选的条目,则返回nullptr。 6.获取指定位置的条目: ```c++ QListWidgetItem *QListWidget::item(int row) const; ``` 返回指定位置的条目,参数row为要获取的条目的位置。 7.获取条目数量: ```c++ int QListWidget::count() const; ``` 返回QListWidget的条目数量。 8.鼠标事件: ```c++ void QListWidget::mousePressEvent(QMouseEvent *event); void QListWidget::mouseMoveEvent(QMouseEvent *event); void QListWidget::mouseReleaseEvent(QMouseEvent *event); ``` 当用户在QListWidget上进行鼠标单击、移动、释放等操作时,会触发相应的鼠标事件处理函数。参数event包含了鼠标事件的详细信息,如鼠标位置等。 9.键盘事件: ```c++ void QListWidget::keyPressEvent(QKeyEvent *event); ``` 当用户在QListWidget上进行键盘按下操作时,会触发该事件处理函数。参数event包含了键盘事件的详细信息,如按下的键值等。 10.条目被单击或双击事件: ```c++ void QListWidget::itemClicked(QListWidgetItem *item); void QListWidget::itemDoubleClicked(QListWidgetItem *item); ``` 当用户在QListWidget单击或双击条目时,会触发相应的事件处理函数。参数item为被单击或双击的条目。 注意,在使用这些方法和事件处理函数时,需要在QListWidget的子类重载相应的函数,并在函数实现自己的逻辑。例如: ```c++ class MyListWidget : public QListWidget { Q_OBJECT public: MyListWidget(QWidget *parent = nullptr) : QListWidget(parent) {} ~MyListWidget() {} protected: void mousePressEvent(QMouseEvent *event) override { // 处理鼠标单击事件 } void mouseMoveEvent(QMouseEvent *event) override { // 处理鼠标移动事件 } void mouseReleaseEvent(QMouseEvent *event) override { // 处理鼠标释放事件 } void keyPressEvent(QKeyEvent *event) override { // 处理键盘按下事件 } private slots: void onItemClicked(QListWidgetItem *item) { // 处理条目单击事件 } void onItemDoubleClicked(QListWidgetItem *item) { // 处理条目双击事件 } }; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值