烟台开发区住房和建设局网站,展示型网站重点,虾想网络定制,深圳html5网站制作目录
1. Qt事件介绍#xff1a;
2. 事件的处理
示例1#xff1a;鼠标进入(enterEvent)与离开事件(leaveEvent)
示例2#xff1a;鼠标点击事件(mousePressEvent)
示例3#xff1a;鼠标移动事件(mouseMoveEvent)
3. 按键事件
4. 定时器
5. 窗口事件 1. Qt事件介绍
2. 事件的处理
示例1鼠标进入(enterEvent)与离开事件(leaveEvent)
示例2鼠标点击事件(mousePressEvent)
示例3鼠标移动事件(mouseMoveEvent)
3. 按键事件
4. 定时器
5. 窗口事件 1. Qt事件介绍
事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用⼀个对象来表示⼀个事件。所 有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘或者是窗口需要重新绘制的时候都会发出⼀个相应的事件。⼀些事件是在用户操作时发出如键盘事件、鼠标事件等另⼀些事件则是由系统本身自动发出如定时器事件。常见的Qt事件如下 2. 事件的处理
事件处理⼀般常用的方法为重写相关的Event函数。
示例1鼠标进入(enterEvent)与离开事件(leaveEvent)
处理鼠标进入与离开事件
1.新建Qt项目基类选择QWidget同时勾选UI界面文件 2. 在ui文件添加label控件 3. 创建QLabel的子类重写enterEvent和leaveEvent
① ② 此时项目多出两个新文件 4. 为了方便给label指定父对象调整一下构造函数
5.函数重写在label.h中
注意重写函数时要确保函数名字和参数列表完全一致 谨防拼写错误为避免错误可以在帮助文档查找目标函数复制粘贴即可
class Label : public QLabel
{Q_OBJECT
public:Label(QWidget* parent);void enterEvent(QEvent *event);void leaveEvent(QEvent *event);
};
6. 在label.cpp重写enterEvent与leaveEvent方法
按alt回车键转到函数定义 void Label::enterEvent(QEvent *event)
{(void) event;//躲避编译器警告qDebug() enterEvent;
}void Label::leaveEvent(QEvent *event)
{(void) event;//躲避编译器警告qDebug() leaveEvent;
} 此时执行程序其实并没有起到效果这是因为此时界面上的label并不是我们定义的Label类的实例其仍然是系统的QLabel创建的实例。 那么问题来了此时也只能从界面上拖动QLabel来创建实例呀如何才能使界面上的label是来自我们自己定义的Label类呢步骤继续 7. 回到ui界面
效果如图 学到了这里我们再来回顾一下在Qt入门3——常用控件1中所写的“给女神表白的程序”当时鼠标点击的时候按钮才会移动现在我希望鼠标进入按钮按钮就随机移动代码如下
1.按照如上步骤添加一个Button类再将“拒绝”按钮提升为Button类
2.重写enterEvent
#include button.hButton::Button(QWidget* parent) : QPushButton(parent)
{srand(time(0));
}void Button::enterEvent(QEvent *event)
{(void) event;//获取父窗口QWidget* parentwidget this-parentWidget();//获取父窗口可用区域的大小int width parentwidget-geometry().width();int height parentwidget-geometry().height();int x rand() % width;int y rand() % height;this-move(x,y);
}
效果如图按钮还没来得及点击就跑了 示例2鼠标点击事件(mousePressEvent)
当鼠标点击时获取相应的坐标值
1. 创建两个label 2. 按照示例1的7将下面的label提升。
3. 在label.h中创建一个私有变量QString类型的私有变量coordText 4. 重写mousePressEvent函数详细步骤参考示例1
void Label::mousePressEvent(QMouseEvent *ev)
{if(ev-button() Qt::LeftButton){coordText QString(此处以label为准的坐标为(%1, %2)).arg(ev-x()).arg(ev-y());}else if(ev-button() Qt::RightButton){coordText QString(此处以主窗口为准的坐标(%1, %2)).arg(ev-globalX()).arg(ev-globalY());}this-setText(coordText);
}效果如图 鼠标释放事件(mouseReleaseEvent)与鼠标双击事件(mouseDoubleClickEvent)与示例2相同不过是需要重写的函数不同罢了此处不再演示。 示例3鼠标移动事件(mouseMoveEvent)
此示例让鼠标移动事件发生在整个窗口所以不再自定义类。
1.在ui界面创建一个label来显示鼠标移动的坐标
2.重写mouseMoveEvent
void Widget::mouseMoveEvent(QMouseEvent *event)
{ui-label-setText(( QString::number(event-x()) , QString::number(event-y()) ));
}
3. 此时运行程序不会有任何反应这是因为鼠标移动不同于鼠标按下和释放随便移动一下鼠标就会产生大量的鼠标移动事件。当进行捕获事件时尤其是执行一些复杂的逻辑时程序的负担会很重可能会产生卡顿的情况。所以默认情况下Qt不会对鼠标移动事件进行跟踪除非显式地告诉Qt //在构造函数中将setMouseTracking设为true
this-setMouseTracking(true); 效果如图 示例4鼠标滚轮滑动事件(wheelEvent)
1.在ui界面创建一个label来显示鼠标移动的坐标
2.重写wheelEvent
void Widget::wheelEvent(QWheelEvent *event)
{//delta()获取到这次事件鼠标滚轮滚动了多远ui-label-setText(QString::number(event-delta()));
}效果如图滚动一次为120像素 3. 按键事件
Qt中的按键事件是通过QKeyEvent类来实现的。当键盘上的按键被按下或者被释放时键盘事件便会触发。
可以在Qt帮助文档中查看QKeyEvent类 组合按键 示例
void Widget::keyPressEvent(QKeyEvent *event)
{//用label显示按下的按键对应的valueui-label-setText(QString::number(event-key()));//用label_2显示按下的单个按键if(event-key() Qt::Key_A){ui-label_2-setText(按下了A键);}//用label_3显示按下的组合按键if(event-key() Qt::Key_A event-modifiers() Qt::ControlModifier){ui-label_3-setText(按下了ctrlA键);}
}
效果如图 4. 定时器
Qt 中在进行窗口程序的处理过程中经常要周期性的执行某些操作或者制作一些动画效果使用定时器就可以实现。所谓定时器就是在间隔一定时间后去执行某一个任务。 Qt中的定时器分为QTimerEvent和QTimer这2个类。 QTimerEvent类用来描述一个定时器事件。在使用时需要通过startTimer()函数来开启一个定时器这个函数需要输入一个以毫秒为单位的整数作为参数来表明设定的时间它返回的整型值代表 这个定时器。当定时器溢出时即定时时间到达就可以在timerEvent()函数中获取该定时器的编号来进行相关操作 QTimer类来实现⼀个定时器它提供了更高层次的编程接口如可以使用信号和槽还可以设置只运行一次的定时器。 示例
1.ui界面创建定时器 2. 重写timerEvent
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);//开启定时器事件//此处timerId是一个定时器的身份标识timerId this-startTimer(1000);//timeId为此类的私有变量
}void Widget::timerEvent(QTimerEvent *event)
{//如果一个程序中存在多个定时器startTimer创建的定时器此时每个定时器都会触发timerEvent函数//先判断这次触发是否是我们想要的定时器触发的if(event-timerId() ! this-timerId){//如果不是我们的定时器触发的就直接忽略//当前程序中只有这一个定时器return;}int value ui-lcdNumber-intValue();if(value 0){//停止定时器this-killTimer(this-timerId);return;}value - 1;ui-lcdNumber-display(value);
}
效果如图 5. 窗口事件
窗口事件有窗口移动事件moveEvent和窗口大小改变事件resizeEvent。
示例
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);QVBoxLayout* layout new QVBoxLayout();layout-addWidget(ui-label);layout-addWidget(ui-label_2);this-setLayout(layout);
}Widget::~Widget()
{delete ui;
}void Widget::moveEvent(QMoveEvent *event)
{QPoint pos event-pos();QString text QString(窗口现在的坐标为(%1,%2)).arg(pos.x()).arg(pos.y());ui-label-setText(text);
}void Widget::resizeEvent(QResizeEvent *event)
{QSize size event-size();QString text QString(窗口现在的长度为%1,宽度为%2).arg(size.width()).arg(size.height());ui-label_2-setText(text);
}
文章转载自: http://www.morning.qwqzk.cn.gov.cn.qwqzk.cn http://www.morning.cryb.cn.gov.cn.cryb.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn http://www.morning.lzqnj.cn.gov.cn.lzqnj.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.ayftwl.cn.gov.cn.ayftwl.cn http://www.morning.zwgbz.cn.gov.cn.zwgbz.cn http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.bgxgq.cn.gov.cn.bgxgq.cn http://www.morning.qtryb.cn.gov.cn.qtryb.cn http://www.morning.jwncx.cn.gov.cn.jwncx.cn http://www.morning.drhnj.cn.gov.cn.drhnj.cn http://www.morning.gwmjy.cn.gov.cn.gwmjy.cn http://www.morning.xblrq.cn.gov.cn.xblrq.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.zybdj.cn.gov.cn.zybdj.cn http://www.morning.lfpzs.cn.gov.cn.lfpzs.cn http://www.morning.dnydy.cn.gov.cn.dnydy.cn http://www.morning.ntzbr.cn.gov.cn.ntzbr.cn http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.jbtwq.cn.gov.cn.jbtwq.cn http://www.morning.jcxqc.cn.gov.cn.jcxqc.cn http://www.morning.xylxm.cn.gov.cn.xylxm.cn http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn http://www.morning.dwxqf.cn.gov.cn.dwxqf.cn http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn http://www.morning.jwlmm.cn.gov.cn.jwlmm.cn http://www.morning.qgtfl.cn.gov.cn.qgtfl.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.zyslyq.cn.gov.cn.zyslyq.cn http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.crrmg.cn.gov.cn.crrmg.cn http://www.morning.mkpkz.cn.gov.cn.mkpkz.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.fpqq.cn.gov.cn.fpqq.cn http://www.morning.ybnps.cn.gov.cn.ybnps.cn http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.dnqliv.cn.gov.cn.dnqliv.cn http://www.morning.pypqf.cn.gov.cn.pypqf.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.wmyqw.com.gov.cn.wmyqw.com http://www.morning.rgdcf.cn.gov.cn.rgdcf.cn http://www.morning.hpspr.com.gov.cn.hpspr.com http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.hsxkq.cn.gov.cn.hsxkq.cn http://www.morning.qkbwd.cn.gov.cn.qkbwd.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.rpzqk.cn.gov.cn.rpzqk.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.daxifa.com.gov.cn.daxifa.com http://www.morning.hwlk.cn.gov.cn.hwlk.cn http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.yqgny.cn.gov.cn.yqgny.cn http://www.morning.nptls.cn.gov.cn.nptls.cn http://www.morning.sbpt.cn.gov.cn.sbpt.cn http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.nydtt.cn.gov.cn.nydtt.cn http://www.morning.hjlwt.cn.gov.cn.hjlwt.cn http://www.morning.cthrb.cn.gov.cn.cthrb.cn http://www.morning.ltpph.cn.gov.cn.ltpph.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn