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

南乐政府门户网站建设网站建设开发简介

南乐政府门户网站建设,网站建设开发简介,网站建设技术外文,购物网站的文化建设问题事件处理 事件是应用程序内部或者外部产生的事情或者动作的统称。 在 Qt 中,事件是用一个对象来管理一个事件的。所有的事件对象都继承自抽象类 QEvent 。事件包括鼠标事件、键盘事件等,发出自 Qt 或操作系统本身。 处理事件一般通过重写相关的 Event 函…

事件处理

事件是应用程序内部或者外部产生的事情或者动作的统称。 在 Qt 中,事件是用一个对象来管理一个事件的。所有的事件对象都继承自抽象类 QEvent 。事件包括鼠标事件、键盘事件等,发出自 Qt 或操作系统本身。

QEvent1

处理事件一般通过重写相关的 Event 函数来实现,Qt 中所有的 Event 函数都是虚函数,都可以进行重写。这通常需要自定义一些控件类来继承 Qt 的控件类(如创建 Label 类继承 QLabel 类),但 ui 界面拖拽出来的控件类型都是 Qt 的内置控件类型(如 QLabel 类),重写不能影响到 ui 的控件。

但 Qt 也提供了解决方法,在 ui 界面对控件右键,选择 提升为… 可以将控件的类型改变成自定义类型(前提是必须继承了相关基类):

QEvent2

1. 处理鼠标事件

注意在重写事件时,包含对应的头文件,事件的函数不包含头文件并不会找不到相关的函数,但其 event 参数一定会找不到它的任何方法。

1.1 enterEvent和leaveEvent

enterEvent 和 leaveEvent 分别表示鼠标进入控件和离开控件的事件。

1.2 mousePressEvent和mouseReleaseEvent

鼠标点击左键、右键、滚轮、侧键等都会触发 mousePressEvent 和 mouseReleaseEvent 。如果想要确定究竟是哪些鼠标按键在触发 mousePressEvent 或 mouseReleaseEvent ,Qt有 Qt::LeftButton 用来表示左键、Qt::RightButton 用来表示右键等,使用代码用来判断什么按键在触发 mousePressEvent:

if(event->button() == Qt::LeftButton)
{qDebug()<<"按下左键";
}
else if(event->button() == Qt::RightButton)
{QDebug()<<"按下右键";
}

1.3 mouseDoubleClickEvent

当鼠标短时间两次点击时,就会触发 mouseDoubleClicked(鼠标双击事件)。但当鼠标双击时,也是会触发两次 mousePressEvent 事件的,所以代码中一定要做好单击和双击的区别判断,否则容易出现单双击同时触发的 Bug。

注意 mouseDoubleClickEvent 和 mouseDoubleClickedEvent 事件都是存在的,不要把这两个搞混了。


#include "label.h"
#include <QMouseEvent>Label::Label(QWidget* parent):QLabel(parent)
{}void Label::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){qDebug()<<"点击鼠标左键";}else if(event->button()==Qt::RightButton){qDebug()<<"点击鼠标右键";}}void Label::mouseDoubleClickEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){qDebug()<<"双击鼠标左键";}else if(event->button()==Qt::RightButton){qDebug()<<"双击鼠标右键";}
}

1.4 mouseMoveEvent

mouseMoveEvent(鼠标追踪事件),由于鼠标只是小幅度移动就会产生大量的 mouseMoveEvent 事件,对程序运行的流畅度有很大影响,Qt 的 widget 默认关闭了鼠标追踪,所以即使重写了 mouseMoveEvent 也不会有效果。要想让鼠标追踪生效,需要使用 this->setMouseTracking(true) ,将鼠标追踪开启。

1.5 wheelEvent

wheelEvent(滚动事件),鼠标每次进行滚轮操作时都会触发这个事件,event 中有一个 delta() 会返回鼠标每次滚轮移动的值,向上为整数,向下为负数。

注意 wheelEvent 的头文件是 #include <QWheelEvent> ,且 event 的类型为 QWheelEvent*

#include "label.h"Label::Label(QWidget* parent):QLabel(parent)
{}void Label::wheelEvent(QWheelEvent *event)
{qDebug()<<event->delta();
}

QEvent3

2. 键盘事件

2.1 keyPressEvent

keyPressEvent(键盘按键事件),当键盘上的按键被按下时就会触发该事件,QShorcut 就是基于该事件来设置快捷键的,实际我们也可以通过改写该事件的虚函数来实现快捷键的效果:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::keyPressEvent(QKeyEvent* event)
{if(event->key()==Qt::Key_A && event->modifiers()==Qt::ControlModifier){qDebug()<<"按下ctrl+A";}
}

注意普通按键是 event->key() ,Ctrl 是 event->modifiers()

3. 定时器事件

3.1 QTimerEvent

QTimerEvent(定时器事件)是与定时器有关的事件, QTimer 类就是通过 QTimerEvent 实现的。每一个定时器都有一个定时器的 ID 标识符,在程序中,可以通过不同的 ID 管理不同的定时器,使用多定时器实现程序的多样化。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimerEvent>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);timerID=this->startTimer(1000);//成员变量}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::timerEvent(QTimerEvent* event)
{if(event->timerId()!=timerID){return;}int value=ui->lcdNumber->intValue();if(value<0){this->killTimer(this->timerID);return;}value-=1;ui->lcdNumber->display(value);
}

4. 窗口移动和大小变化事件

4.1 moveEvent

moveEvent(窗口移动事件),当窗口移动时就会触发该事件,可以通过该事件实时获取窗口此时的位置。

4.2 resizeEvent

resizeEvent(窗口大小变化事件),当窗口大小发生变化时就会触发该事件,可以通过该事件动态调整控件大小。

http://www.dtcms.com/wzjs/183351.html

相关文章:

  • 郑州网站建设企业推荐广东网约车涨价
  • pexels免费素材网站专业网站建设
  • wordpress调用单页面win10优化大师免费版
  • 基于php mysql的网站开发网站怎么注册
  • 番禺网站制作厦门seo厦门起梦
  • 靠谱的网站制作公司百度快照关键词推广
  • 柳传志 潘石屹做水果网站网络营销所学课程
  • 做网站不备案会怎样国内做网站的公司
  • 公司网站营销百度公司销售卖什么的
  • 网站平台专题如何制作武汉seo网站排名优化公司
  • 单页网站 产品放哪网站代运营推广
  • 塑胶包装东莞网站建设谷歌官网登录入口
  • 丰台深圳网站建设公司可以发布软文的平台
  • 装修装饰网站建设哪个网站是免费的
  • 网站建设得多钱北京seo招聘
  • 塘厦镇仿做网站中国十大流量网站
  • 网站开发一般用什么软件成都seo招聘信息
  • 室内设计哪个学校最好北京seo运营推广
  • 家电网站制作信息流广告公司排名
  • 网站的客户体验百度在线提问
  • 大连网站建设辽icp备短链接在线生成官网
  • 小说网站得广告怎么做矿泉水软文广告500字
  • 做网站用域名不备案怎么弄怎么在网上做推广
  • wordpress扩展class名称哈尔滨网络seo公司
  • 重庆渝中区企业网站建设公司cnn头条新闻
  • 免费网站空间怎么办seo第三方点击软件
  • 互联网网站备案职业技能培训学校
  • 微信公众号登录平台官网深圳seo优化外包公司
  • 集团网站建设详细策划怎么查网站是不是正规
  • wordpress博客小工具标签百度seo引流