当前位置: 首页 > news >正文

西安未央网站建设马鞍山网站建设专业制

西安未央网站建设,马鞍山网站建设专业制,两学一做11月答题网站,网站 建设 计划本章要实现的整体效果如下: QEvent::KeyPress ​ 键盘按下时,触发该事件,它对应的子类是 QKeyEvent QEvent::KeyRelease ​ 键盘抬起时,触发该事件,它对应的子类是 QKeyEvent 本节通过两个案例来讲解这 2 个事件&…

本章要实现的整体效果如下:

整体效果


QEvent::KeyPress

​ 键盘按下时,触发该事件,它对应的子类是 QKeyEvent

QEvent::KeyRelease

​ 键盘抬起时,触发该事件,它对应的子类是 QKeyEvent


本节通过两个案例来讲解这 2 个事件:

  • 键盘按下、释放事件的基本使用
  • 通过键盘的上下左右箭头,控制标签控件的上下

1. 键盘按下、释放事件的基本使用

只需重写 keyPressEvent()keyPressEvent() 两个函数即可

首先,在 key_widget.h 中添加两个函数的声明

class KeyWidget : public QWidget
{
protected:void keyPressEvent(QKeyEvent* event);void keyReleaseEvent(QKeyEvent* event);
};

然后,来到 key_widget.cpp 实现这 2 个函数:

void KeyWidget::keyPressEvent(QKeyEvent* event)
{// 普通键switch ( event->key() ) {case Qt::Key_Return:qDebug() << "Enter";break;case Qt::Key_Escape:qDebug() << "Esc";break;case Qt::Key_Control:qDebug() << "Ctrl";break;case Qt::Key_Shift:qDebug() << "Shift";break;case Qt::Key_Alt:qDebug() << "Alt";break;case Qt::Key_Up:qDebug() << "Up";break;case Qt::Key_Down:qDebug() << "Down";break;case Qt::Key_Left:qDebug() << "Left";break;case Qt::Key_Right:qDebug() << "Right";break;case Qt::Key_A:qDebug() << "A";break;case Qt::Key_B:qDebug() << "B";break;case Qt::Key_C:qDebug() << "C";break;case Qt::Key_D:qDebug() << "D";break;default:break;}// 两键组合//    qDebug() << event->modifiers(); // QFlags<Qt::KeyboardModifier>(ShiftModifier|ControlModifier)// event->modifiers(),用来判读是否按下 Ctrl/Shift/Alt 键if ( (event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A) ) {qDebug() << "Ctrl + A";}if ( (event->modifiers() == Qt::ShiftModifier) && (event->key() == Qt::Key_C) ) {qDebug() << "Shift + B";}if ( (event->modifiers() == Qt::AltModifier) && (event->key() == Qt::Key_B) ) {qDebug() << "ALT + C";}// 三键组合Shift + Ctrl + D 的实现if ( (event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier)) && (event->key() == Qt::Key_D) ) {qDebug() << "CTRL + Shift + D";}
}void KeyWidget::keyReleaseEvent(QKeyEvent* event)
{switch ( event->key() ) {case Qt::Key_Return:qDebug() << "keyReleaseEvent: Enter";break;case Qt::Key_Escape:qDebug() << "keyReleaseEvent: Esc";break;case Qt::Key_Up:qDebug() << "keyReleaseEvent: Up";break;case Qt::Key_Down:qDebug() << "keyReleaseEvent: Down";break;case Qt::Key_Left:qDebug() << "keyReleaseEvent: Left";break;case Qt::Key_Right:qDebug() << "keyReleaseEvent: Right";break;case Qt::Key_A:qDebug() << "keyReleaseEvent: A";break;case Qt::Key_B:qDebug() << "keyReleaseEvent: B";break;case Qt::Key_C:qDebug() << "keyReleaseEvent: C";break;case Qt::Key_D:qDebug() << "keyReleaseEvent: D";break;case Qt::Key_Control:qDebug() << "keyReleaseEvent: Ctrl";break;case Qt::Key_Shift:qDebug() << "keyReleaseEvent: Shift";break;case Qt::Key_Alt:qDebug() << "keyReleaseEvent: Alt";break;}
}

说明:

  • 每个按键对应一个枚举值,比如 Qt::Key_A 代表按键 AQt::Key_Control 代表 Crtl 键,等等
  • QKeyEvent 类的 key() 方法,可以获取当前按下的哪个按键
  • 判断 Ctrl/Shift/Alt 等控制按键,需要使用 QKeyEvent 类的 modifiers() 方法

最后,还需要在构造中添加如下语句:

KeyWidget::KeyWidget(QWidget* parent) : QWidget{parent}
{setFocusPolicy(Qt::StrongFocus);
}

此时,运行程序,可以看到打印如下:

运行效果


2. 键盘事件移动标签

接下来,实现一个小案例:通过上下左右按键,来移动标签的位置

(1)界面上添加标签

首先,在 key_widget.h 中添加成员变量:

#include <QLabel>class KeyWidget : public QWidget
{
private:QLabel* lbl;
};

然后,在 key_widget.cpp 的构造中添加一个标签:

KeyWidget::KeyWidget(QWidget* parent) : QWidget{parent}
{setFocusPolicy(Qt::StrongFocus);// 添加一个 QLabellbl = new QLabel(this);lbl->setText("");lbl->setFrameShape(QFrame::Box);lbl->setFixedSize(100, 100);lbl->setStyleSheet("background-color: red;");
}

此时,运行效果如下:

运行效果


(2)移动标签

只需修改上下左右按键的逻辑即可(当移动到尽头,则从另一端重新出现开始移动):

void KeyWidget::keyPressEvent(QKeyEvent* event)
{// 普通键switch ( event->key() ) {case Qt::Key_Up:qDebug() << "Up";lbl->move(lbl->x(), lbl->y() - 20);if ( lbl->y() + lbl->height() <= 0 ) {lbl->move(lbl->x(), this->height());}break;case Qt::Key_Down:qDebug() << "Down";lbl->move(lbl->x(), lbl->y() + 20);if ( lbl->y() >= this->height() ) {lbl->move(lbl->x(), 0);}break;case Qt::Key_Left:qDebug() << "Left";lbl->move(lbl->x() - 20, lbl->y());if ( lbl->x() + lbl->width() <= 0 ) {lbl->move(this->width(), lbl->y());}break;case Qt::Key_Right:qDebug() << "Right";lbl->move(lbl->x() + 20, lbl->y());if ( lbl->x() >= this->width() ) {lbl->move(0, lbl->y());}break;}
}

此时,按键盘上的上下左右箭头,效果如下:

运行效果

http://www.yayakq.cn/news/338611/

相关文章:

  • 网深圳网站优化wordpress5.0.1
  • 如何增加网站外链一站式快速网站排名多少钱
  • 足球梦网站建设的基本思路wordpress仿站服务
  • 青岛建设系统一体化网站商品分类批量导入wordpress
  • 制作投票网站网页版梦幻西游火眼金睛
  • 福州网站建设网络公司帝国手机网站cms系统
  • 山东嘉邦家居用品公司网站 加盟做经销商多少钱 有人做过吗搜索百度网页版
  • 服务器做多个网站做视频网站 视频放在哪
  • ck播放器做解析网站wordpress标签模板下载
  • 登陆网站空间十大免费行情软件在线观看
  • 舆情app免费成都网络优化公司有哪些
  • 网站颜色设计徐州做网站的公司有几家
  • 联雅网站建设东莞网站优化公
  • 沙井品牌网站建设怎样新建网站
  • 网站上的图片一般多大合适网页制作作品阐述
  • 企业没有专业人员怎么建设网站网络推广营销策略
  • 主持人做的化妆品网站app展示网站
  • iis网站ip小程序商城开发华网天下优秀
  • 网站建设的客户基于 wordpress
  • 网站建设用户需求阿里云网站备案核验单
  • 邢台集团网站建设价格wordpress播放器源码
  • 网站标题改了软件开发合同范本大全
  • 怎么在百度制作自己的网站做问卷调查的网站有啥
  • 怎么做交易猫假网站如何自定义wordpress登录
  • 浙江做公司网站多少钱南京平面设计培训
  • 琼海网站建设公司北京石景山私人影院哪里有
  • phpmysql网站开发技术好做的网站
  • 北京随喜设计网站安徽元鼎建设工程网站
  • 网站备案导致网站被k注册安全工程师官网
  • 大连微信网站建设wordpress自定义