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

培训网站建设百度收录申请入口

培训网站建设,百度收录申请入口,阜阳营销型网站建设,模板网站制作时间Qt事件处理 一、事件基础 事件是Qt应用程序中的基本构建块,它们代表了一些特定的行为或状态变化。事件可以是鼠标点击、键盘输入、窗口大小改变、定时器事件等。每个事件都是一个对象,继承自QEvent类。 二、事件常见类型 Qt中的事件分为多种类型&…

Qt事件处理

一、事件基础

事件是Qt应用程序中的基本构建块,它们代表了一些特定的行为或状态变化。事件可以是鼠标点击、键盘输入、窗口大小改变、定时器事件等。每个事件都是一个对象,继承自QEvent类。

二、事件常见类型

Qt中的事件分为多种类型,每种类型对应不同的行为。以下是一些常见的事件类型:
1、键盘事件(QKeyEvent): 处理键盘按键的按下和松开事件。

2、鼠标事件(QMouseEvent): 处理鼠标移动、鼠标按键的按下和松开事件。

3、拖放事件(QDragEvent 和 QDropEvent): 用鼠标进行拖放操作时涉及的事件,包括拖拽和放置。

4、滚轮事件(QWheelEvent): 处理鼠标滚轮的滚动事件。

5、绘图事件(QPaintEvent): 在控件需要重新绘制时触发,用于自定义绘制。

6、定时事件(QTimerEvent): 在定时器到期时触发,用于执行周期性任务。

7、焦点事件(QFocusEvent): 处理键盘焦点的移动,如窗口控件获得或失去焦点。

8、进入和离开事件(QEnterEvent 和 QLeaveEvent): 处理鼠标移入或移出窗口控件的事件。

9、移动事件(QMoveEvent): 处理窗口控件的位置改变事件。

10、大小改变事件(QResizeEvent): 处理窗口控件的大小改变事件。

11、显示和隐藏事件(QShowEvent 和 QHideEvent): 处理窗口控件的显示和隐藏事件。

12、窗口事件(QWindowStateChangeEvent): 处理窗口是否为当前窗口的状态变化事件。

三、事件接收者

每个继承自QObject的类都可以成为一个事件接收者,这意味着它能够接收并处理事件。窗口小部件(widget)如QWidget、QMainWindow以及其他继承自它们的控件都是事件接收者的例子。

四、事件过滤器

Qt允许您在事件到达接收者之前拦截和处理事件。这通过事件过滤器实现,即在事件到达目标对象之前先经过另一个对象的处理。这对于全局事件处理或者对多个对象应用相同逻辑的情况非常有用。

五、事件处理步骤

1、选择事件接收者:

首先,您需要确定哪个对象将成为事件的接收者。通常,这是一个继承自QWidget的窗口小部件或其他继承自QObject的类。

2、重写事件处理函数:

根据您要处理的事件类型,在事件接收者类中找到相应的事件处理函数,并进行重写。每个事件类型都对应一个特定的函数,例如:keyPressEvent、mousePressEvent、paintEvent等。

3、编写事件处理逻辑:

在事件处理函数中,您可以编写处理特定事件的代码逻辑。例如,在keyPressEvent中,您可以检查按下的键,并根据需要执行操作。

4、调用基类事件处理函数:

如果您希望在处理完事件后将其传递给基类进行进一步处理,可以通过调用基类的事件处理函数来实现。这在您希望继续保留默认行为的情况下很有用。

六、常见三种事件处理应用

1、重写特定的事件处理函数

例如:mousePressEvent(), keyPressEvent(), paintEvent() 这样的特定事件处理函数

下面是重写特定的keyPressEvent()函数实现键盘上、下、左和右键盘的控制

void Widget::keyPressEvent(QKeyEvent *event)
{switch (event->key()) {case Qt::Key_Up:ui->label->move(ui->label->x(), ui->label->y()-4);break;case Qt::Key_Down:ui->label->move(ui->label->x(), ui->label->y()+4);break;case Qt::Key_Left:ui->label->move(ui->label->x()-4, ui->label->y());break;case Qt::Key_Right:ui->label->move(ui->label->x()+4, ui->label->y());break;default:break;}
}

下面是重写特定的mouseMoveEvent()函数实现

//鼠标特殊设备,必须按下任意键 移动时才会产生鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{//x():获取当前鼠标在界面的x轴坐标ui->label->move(event->x() - ui->label->width()/2, event->y() - ui->label->height()/2);
}

2、重写所有事件的处理函数(event())

  • 1、界面的产生的任何事件处理首先是调用基类的event()方法进行处理
  • 2、event()函数内部,判断事件的类型,然后迪奥用基类的特定的事件出来器进行处理
  • 3、如果是派生类重写了特定事件处理器,则event()调用了派生类重写的虚函数,实现新功能

注意:如果派生类的重写了event()虚函数,则界面产生的事件预先调用派生类重写的event()方法

  • ①判断自己感兴趣的事件,实现新功能,处理完返回true
  • ②不感兴趣的事件,则需要手动调用基类QWidgetevent()函数进行默认处理,返回基类处理的结果
bool Widget::event(QEvent *event)
{if(event->type() == QKeyEvent::KeyPress){//这里我们直接调用上面重写特定好的函数实现鼠标按下的事件keyPressEvent((QKeyEvent *)event);return true;}if(event->type() == QMouseEvent::MouseMove){//这里就是直接把重写鼠标移动MouseMove事件逻辑的全部代码放到里面来QMouseEvent *e = (QMouseEvent *)event;ui->label->move(e->x() - ui->label->width()/2, e->y() - ui->label->height()/2);return true;}return QWidget::event(event);
}

3、重写(在对象上安装)事件过滤器

事件过滤器目的是筛选出感兴趣的控件上产生的感兴趣的事件

bool QObject::eventFilter(QObject *watched, QEvent *event);

watched:感兴趣的对象
event:事件

installEventFilter( const QOject *obj );

步骤

  • ①重写eventFilter函数
  • ②将关注的控件加载到安装到当前类的过滤器中,installEventFilter(this);这样在该控件上产生的任何事件都优先调用eventFilter(),不会调用event()
bool Widget::eventFilter(QObject *watched, QEvent *event)
{//判断该事件产生的对象是否感兴趣的控件if(watched == ui->label_2){//再次判断该控件上产生的事件是否为按兴趣的事件if(event->type() == QMouseEvent::MouseButtonPress){QMouseEvent *e = (QMouseEvent *)event;if(e->button() == Qt::LeftButton){ui->label->setStyleSheet("background-color:#aa00ff;");qDebug()<<"LeftButton";}if(e->button() == Qt::MiddleButton){ui->label->setStyleSheet("background-color:#ff00ff;");qDebug()<<"MiddleButton";}if(e->button() == Qt::RightButton){ui->label->setStyleSheet("background-color:#dd000f;");qDebug()<<"RightButton";}return true;}/*该控件上不感兴趣的事件,都忽略*return false;*该控件上的事件其他不该兴趣的事件交给基类处理*return QWidget::eventFilter(watched, event);*/return QWidget::eventFilter(watched, event);}/**凡是不感兴趣的控件上的事件,都交给基类来处理*return QWidget::eventFilter(watched, event);*/return QWidget::eventFilter(watched, event);
}

关于事件过滤器的返回值需要注意的三个点
①对该对象感兴趣的事件执行好后返回true,对该对象不感兴趣的事件返回false(都忽略)
②对一个或几个对象上的事件感兴趣,其他不该兴趣的事件交给基类的event()函数来处理,并返回的结果作为事件的处理结果

return QWidget::eventFilter(watched, event);

③凡是不感兴趣的对象上的事件,也都交给基类来处理

return QWidget::eventFilter(watched, event);
http://www.shuangfujiaoyu.com/news/54829.html

相关文章:

  • 买奢侈品代工厂做的产品的网站名百度 营销推广怎么操作
  • 怎么样做深网的网站关键词林俊杰无损下载
  • 服装设计素材网站大全网络营销主要是学什么的
  • 北京做网站报价百度开车关键词
  • wordpress技术类主题seo基础篇
  • 男女做那个能看的视频网站郑州seo顾问外包
  • 网页设计教程详细步骤ppt长沙seo全网营销
  • 成华区网站建设公司宁波seo推广定制
  • 仿站WordPress个人建网站的详细步骤
  • 响应式 网站建设免费关键词挖掘网站
  • 什么网站可以做问卷调查优化网站的软件下载
  • 虚拟主机与网站建设上海优化网站
  • 学做游戏 网站企业邮箱哪个好
  • 全球采购网站百度推广电话客服24小时
  • 备案期间 需要关闭网站吗快速排名工具免费查询
  • 网站设计怎么做毕业论文seo教程技术
  • 建设银行信用卡进度查询官方网站百度指数移动版怎么用
  • 手机传奇手游发布网站推广app的软文案例
  • 做网站赚钱全攻略百度网站提交
  • 重庆微信网站制作公司谷歌搜索引擎入口2022
  • 响应式的网站做优化好吗计算机培训机构排名
  • 我做服装设计师的 求推荐资源网站宁波seo关键词优化
  • 怎么用自己电脑做网站服务器网络营销的推广方法
  • 多多进宝怎么推广赚钱seo排名优化的网站
  • 江苏外贸型网站制作手机百度官网首页
  • 手机商城网站源码营销传播
  • 网站建设 赛门仕博百度推广电话
  • 怎么查看网站有没有做ssl百度识图查图片
  • 福州开发网站公司百度后台登录
  • 去国外做移动支付网站吗如何建立自己的网站平台