Qt时间,图片显示和事件处理
Qt中用SQLite读写时间和日期

原创Sqlite+Qt4.5.3+QDateTime编写程序2010-04-08 12:35本文为自己原创,如要转载,请注明出处/armlinuxhouse/blog/item/8e028897c8aae847d0135e4c. html看了看网上关于Qt的sqlite数据库中存入时间的文章并不多,自己在做项目的过程中也正好遇到了这个问题,一位很难搞定,小人不才,弄了弄,竟然弄好了,特此和大家分享过程,sqlite数据库建表的话,如果在dos界面下手敲的话,可能会累死你,你可以去下一个sqlite的图示管理工具sqliteadmin.,搜一下就出来了,当然在linux好像有可视话的工具,如果没找到linux下的,你也可以用sqliteadmin 建好表,在linux下直接用也可以,如果熟悉的sqlite的话,你应该知道关于时间的数据格式在sqlite里有Date和time,不用解释,我想应该很清楚,所以,如果做时间的数据库,你必须添加这两个字段,从数据方面讲,可以分为插入和读取两个方面,先看一下插入的过程贴代码mywidgetquery->exec(QString("INSERT INTO yingyebase (YYALLMoney,YYDate,YYTime,YYPayType) VALUES(%1,'%2','%3','%4');").arg(yymoney).arg(QDateTime::currentDateTime().date().toString("yyyy-MM-dd")).arg(QDateTime::currentDateTime().time().toString("hh:mm:ss")).arg(tr("RMB方式")));我的表的YYData和YYTime就是分别表示日期和时间。
Qt:QDateTime

Qt:QDateTime0、说明提供时间⽇期的表达和相关函数。
QDateTime通过⽇期+时间来构造⼀个⽇期时间。
它综合了QDate和QTime的所有特性。
它可以通过系统时钟来获取当前DateTime。
它还提供了⽐较时间的⽅法和对时间进⾏加减运算的⽅法。
QDateTime可以分别通过本地时间、UTC、UTC偏移时间、指定时区(通过QTimeZone类实现)来描述⽇期时间。
这些时间间是相关的,例如,UTC偏移 +3600×8 秒等同于ISO标准标识 UTC+08:00,等同于时区为CN/Beijing的时间。
1)构造⼀个QDateTime既可以直接通过传⼊⼀个date和time进⾏构造,也可以调⽤如currentDateTime()、fromMSecsSinceEpoch()的静态函数来进⾏构造。
date和time可以通过setDate()、setTime()来进⾏设置,也可以直接通过setMSecsSinceEpoch()来⽤时间戳进⾏构造,也可以⽤fromString()来从⼀个String⽤相关的格式进⾏构造。
2)当前时间QDateTime::currentDateTime()返回当前DateTime,QDateTime::currentDateTimeUtc()返回UTC下的当前时间。
3)提取与设置可以通过date()、time()来提取该DateTime中的Date与Time。
同样的信息可以通过在toString()中传⼊指定格式来实现。
4)运算addMSecs():加上毫秒addSecs():秒addDays():⽇addMonths():⽉addYears():年daysTo():两个DateTime间的天数msecTo():两个DateTime间的毫秒数5)转换toTimeSpec():转换为本地时间toOffsetFromUtc():转换为UTC偏移时间toTimeZone():转换为时区时间timeSpec():存储时间的相对时间规范Qt::TimeZone + timeZone():返回时区注意事项①没有0年只有-1与1年1、模块和加载项Header:#include <QDateTime>qmake:QT += core2、构造(QDateTime other)构造另⼀个QDateTime的副本(QDate date, QTime time, QTimeZonetimeZone)⽤指定的Date、Time、TimeZone 构造DateTime(QDate date, QTime time, Qt::TimeSpec spec,int offsetSeconds)(QDate date, QTime time, Qt::TimeSpec spec =Qt::LocalTime)(QDate date)⽤指定QDate构造QDateTime()3、静态字段enum class { First, Last }年的范围Constant Value DescriptionQDateTime::YearRange::First-292275056The later parts of this year are representableQDateTime::YearRange::Last+292278994The earlier parts of this year are representable5、静态⽅法返回值类型⽅法说明QDateTime ()当前本地时间()当前UTC时间qint64()当前时间戳(毫秒)()当前时间戳(秒)QDateTime(CFDateRef date)从⼀个CFDate构造QDateTime(qint64 msecs)(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0)(qint64 msecs, QTimeZone timeZone)返回时间戳(毫秒)对应的QDateTime(const NSDate *date)从NSDate构造QDateTime(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)(qint64 secs, QTimeZone timeZone)返回时间戳(秒)对应的QDateTime (QString string, Qt::DateFormat format = Qt::TextDate)(QString string, QString format)(QString string, QString format, QCalendar cal)从QString⽤指定格式构造QDateTime6、实例⽅法返回值类型⽅法说明QDateTime &boolboolboolboolboolbool (QDateTime other)(QDateTime other)(QDateTime other)(QDateTime other)(QDateTime other)(QDateTime other)(QDateTime other)赋值⽐较两个⽇期的⼤⼩(qint64 ndays)(qint64 msecs)QDateTime加⼀定时间,得到新QDateTime。
qt中qtimerevent用法

qt中qtimerevent用法一、引言在Q t中,Q ti me rE ve n t是一个用于处理定时器事件的重要函数。
它能够帮助我们实现时间相关的功能,如定时任务、动画效果、周期性刷新等等。
本文将介绍Qt中QT im er Ev en t的基本用法及其在实际开发中的应用。
二、Q T i m e r E v e n t概述Q T im er Ev en t是Qt中的一个事件类,用于处理定时器事件。
通过重写Q Ti me rE ve nt的相关函数,我们可以在特定的时间间隔内执行我们想要的操作。
三、Q T i m e r E v e n t使用步骤1.继承Q O b j e c t在使用Q Ti me rE ve nt之前,我们需要先继承QO bj ec t类。
```c ppc l as sM yO bj ec t:pub l ic QO bj ec t{//...}```2.重写t i m e r E v e n t函数在继承Q Ob je ct类的派生类中,我们需要重写t im er Ev en t函数。
该函数会在定时器事件触发时被调用。
```c ppv o id My Ob je ct::tim e rE ve nt(Q Ti me rEv e nt*e ve nt){//在这里处理定时器事件}```3.创建定时器在需要使用定时器的地方,我们需要创建一个QT im er对象,并将其与我们的派生类关联。
```c ppQ T im er*t im er=n ewQ T im er(t hi s);c o nn ec t(ti me r,SIG N AL(t im eo ut()),t h is,S LO T(ha nd leT i me rE v e n t()));```4.启动和停止定时器我们可以使用st art和st op函数启动和停止定时器。
```c ppt i me r->s ta rt(i nte r va l);//启动定时器,设置时间间隔为i n te rv al毫秒t i me r->s to p();//停止定时器```四、Q T i m e r E v e n t实例为了更好地理解Q Tim e rE ve nt的用法,我们将结合一个实际的例子进行说明。
QT间期延长

QT间期延长QT间期是心电图上反映心室去极化时间的指标,通常是从Q波起点到T波终点的时间长度。
它代表了心室收缩后重新极化的时间,因此对心脏健康有着重要的意义。
QT间期的正常范围因性别、年龄和心率等因素而异,一般为男性450-460ms,女性为460-470ms,心率越快,QT间期越短。
QT间期的延长是一种心电图异常,可能是遗传因素、药物作用、电解质异常、代谢异常、心肌缺血、心肌炎症等引起的。
当QT间期超过正常范围时,可能会出现严重的心律失常,包括室性心动过速、室性心动过缓、扭转性室性心动过速、心室颤动等,甚至会导致猝死。
因此,及早发现和处理QT间期的延长对于预防心律失常和保护心脏健康非常重要。
以下是常见的导致QT间期延长的原因:1.遗传因素:长QT综合征是一种常见的遗传性心律失常,其特点是QT间期延长、易发生室性心动过速和猝死。
目前已经发现多种长QT综合征的基因突变,包括LQT1、LQT2、LQT3等,临床医生可以通过基因检测来明确诊断。
2.药物作用:许多药物都可以引起QT间期延长,包括心脏药物、抗生素、抗精神病药等。
其中最常见的是心脏药物,如普萘洛尔、莫西沙星等。
当患者同时使用多种具有QT延长作用的药物时,会增加心律失常的风险。
3.电解质异常:血钾、血钙、血镁等电解质的浓度异常也会导致QT间期延长。
例如,低血钾会导致心肌细胞去极化时间延长,从而引起QT间期延长。
4.代谢异常:代谢异常也可能导致QT间期延长,如低血糖、低血镁等。
5.心肌缺血:心肌缺血是指心脏供血不足,导致心肌缺氧和损伤。
当心肌缺血时,心肌细胞的电活动也会发生改变,可能导致QT间期延长。
因此,心肌缺血是引起QT间期延长的常见原因之一。
6.心肌炎症:心肌炎症是指心肌组织发生炎症反应,导致心肌细胞损伤和死亡。
当心肌细胞受损时,心肌细胞的电活动也会发生改变,可能导致QT间期延长。
7.其他原因:还有一些其他原因也可能导致QT间期延长,如睡眠不足、情绪激动、饮酒、吸烟等。
qdatetime用法

qdatetime用法qdatetime是Qt框架中的一个类,用于处理日期和时间。
它提供了一系列的函数和方法,可以方便地获取、设置和操作日期和时间。
首先,我们可以使用qdatetime类来获取当前的日期和时间。
通过调用currentDateTime()函数,我们可以得到一个QDateTime对象,该对象表示当前的日期和时间。
例如:QDateTime current = QDateTime::currentDateTime();接下来,我们可以使用QDateTime对象的各种方法来获取日期和时间的各个部分。
例如,我们可以使用date()方法来获取日期部分,time()方法来获取时间部分。
这些方法返回的是QDate和QTime对象,分别表示日期和时间。
例如:QDate date = current.date();QTime time = current.time();我们还可以使用QDateTime对象的toString()方法来将日期和时间转换为字符串。
该方法接受一个参数,用于指定日期和时间的格式。
例如,我们可以使用"yyyy-MM-dd"来表示日期的格式,使用"hh:mm:ss"来表示时间的格式。
例如:QString dateString = current.toString("yyyy-MM-dd");QString timeString = current.toString("hh:mm:ss");除了获取日期和时间的各个部分,我们还可以使用QDateTime对象的addDays()、addMonths()和addYears()等方法来进行日期的加减运算。
这些方法接受一个整数参数,表示要加减的天数、月数或年数。
例如,我们可以使用addDays()方法来将日期向后推迟一天:QDateTime tomorrow = current.addDays(1);我们还可以使用QDateTime对象的daysTo()、monthsTo()和yearsTo()等方法来计算两个日期之间的天数、月数或年数。
QT学习笔记4:QT中GraphicsView编程

QT学习笔记4:QT中GraphicsView编程⼀、QGraphicsScene1、QGraphicsSceneQGraphicsScene继承⾃QObject,是⼀个管理图元的容器,与QGraphicsView合⽤可以在2D屏幕上显⽰如线、三⾓形、⽂本、⾃定义图元等图元。
QGraphicsScene是不可见的,只⽤于管理图元。
为了查看场景,需要创建⼀个视图组件。
⼀个场景分为三个层:图元层、前景层和背景层。
场景的绘制总是从背景层开始,然后是图形项层,最后是前景层。
2、事件处理与传播QGraphicsScene的责任之⼀是传播来⾃视图的事件。
要发送⼀个事件到场景,需要构造⼀个继承⾃QEvent的事件,使⽤QApplication::sendEvent()函数发送事件。
event()函数负责派发事件到各个图元。
常⽤的事件会被便利事件处理函数处理,如⿏标按下事件会被mousePressEvent()函数处理。
按键事件会被派发到焦点图元。
为了设置焦点图元,可以调⽤setFocusItem()函数,或是图元⾃⾝调⽤QGraphicsItem::setFocus()函数。
调⽤focusItem()函数可以获取当前的焦点图元。
为了兼容图形组件,场景维护着⾃⼰的焦点信息。
默认场景并没有焦点,并且所有的按键事件会别丢弃。
如果setFocus()函数被调⽤,或是场景中⼀个图元获得了焦点,场景会⾃动获得焦点。
如果场景有焦点,hasFocus()函数会返回true,按键事件会被发送到焦点图元。
如果场景失去了焦点,⽽图元有焦点(如调⽤clearFocus()函数),场景会维护图元的焦点信息,⼀旦场景重新获得焦点,会确保最后⼀个有焦点的图元获得焦点。
对于悬停效果,QGraphicsScene会派发悬停事件,如果某个图元接受了悬停事件(调⽤QGraphicsItem::acceptHoverEvents()),当⿏标进⼊图元的区域时,图元会接收到⼀个GraphicsSceneHoverEnter事件。
Qt利用QTime类来控制时间,QTime的成员函数的用法
Qt利⽤QTime类来控制时间,QTime的成员函数的⽤法QTime::QTime()默认构造函数,构造⼀个时,分,秒都为0的时间,如00:00:00.000(午夜)QTime::QTime(int h, int m, int s=0, int ms = 0)构造⼀个⽤户指定时,分,秒的时间.其参数有效值为:h:0--23m:0--59ms:0--999QTime QTime::addMSecs(int ms) const返回⼀个当前时间对象之后或之前ms毫秒的时间对象(之前还是之后视ms的符号,如为正则之后,反之之前)如:QTime time(3,0,0);QTime newTime1 = time.addMSecs(1000);QTime newTime2 = time.addMSecs(-1000);则newTime1是⼀个⽐time所指定时间(03:00:00.000)延后1000毫秒也即1秒的时间(03:00:01.000),⽽newTime2则提前1000毫秒(02:59:59.000)QTime QTime::addSecs(int nsecs) const与addMSecs()相同,只是nsecs单位是秒.即返回⼀个当前时间对象之前或之后的时间对象.int QTime::elapsed() const返回最后⼀次调⽤start()或restart()到现在已经经过的毫秒数.如果经过了24⼩时之后,则计数器置0.如果系统时间设置改变,则结果不确定.int QTime::hour() const返回时间对象的⼩时,取值范围(0--23)int QTime::minute() const返回时间对象的分钟,取值范围(0--59)int QTime::second() const返回时间对象的秒,取值范围(0--59)int QTime::msec() const返回时间对象的毫秒,取值范围(0--999)bool QTime::isNull() const如果时间对象等于00:00:00.000,则返回true;反之返回false.bool QTime::isValid() const如果时间对象是有效的,则返回true;反之返回false.(即:时,分,秒,毫秒都在其取值范围之内)int QTime::msecsTo(const QTime &t) const返回当前时间对象到t所指定的时间之间的毫秒数.如果t早于当前时间对象的时间,则返回的值是负值.因为⼀天的时间是86400000毫秒,所以返回值范围是-86400000--86400000int QTime::secsTo(const QTime &t) const与msecsTo()基本相同,只是返回的是秒数,返回值的有效范围是-86400--86400int QTime::restart()设置当前时间对象的值为当前系统时间,并且返回从最后⼀次调⽤start()或restart()到现在的毫秒数.如果计数器超出24⼩时,则置0.如果计数器计数时系统时间设置改变,则结果不确定.bool QTime::setHMS(int h, int m, int s, int ms = 0)设置当前时间对象的时,分,秒和毫秒.如果给定的参数值有效,则返回true,否则返回false.void QTime::start()设置当前时间对象的值为当前系统时间,这个函数实际是结合restart()和elapsed()⽤来计数的.QString QTime::toString(const QString &format) const按照参数format指定的格式⽤字符串形式输出当前时间对象的时间.参数format⽤来指定时,分,秒,毫秒的输出格式.如(hh:mm:ss.zzz)h:表⽰⼩时,范围是0--23hh:⽤两位数表⽰⼩时,不⾜两位的前⾯⽤0补⾜,如(0点:00,3点:03,11点:11)m:表⽰分钟,范围0--59mm:⽤两位数表⽰分钟,不⾜两位的前⾯⽤0补⾜.s:表⽰秒,范围0--59ss:⽤两位数表⽰秒,不⾜两位的前⾯⽤0补⾜.z:表⽰毫秒,范围0--999zzz:⽤三位数表⽰毫秒,不⾜三位的前⾯⽤0补⾜.AP:⽤AM/PM显⽰.ap:⽤ap/pm显⽰.例如:QTime time(14,3,9,42);//设置时间为14:03:09.042QString i = time.toString("hh:mm:ss.zzz");//结果为14:03:09.042QString j = time.toString("h:m:s.z");//结果为14:3:9.42QString m = time.toString("h:m:s.z AP");//结果为2:3:9.42 PMQString n = time.toString("h:m:s.z ap");//结果为2:3:9.42 pmQString QTime::toString(Qt::DateFormat f = Qt::TextDate) const按照参数format指定的格式⽤字符串形式输出当前时间对象的时间.参数的可选值:Qt::TextDate:格式为HH:MM:SSQt::ISODate:遵循ISO8601的时间表⽰格式,同样也为HH:MM:SSQt::LocalDate:字符串格式依赖系统本地设置----------------------------------------------------------------------------------------------------------------------------------------静态成员函数:QTime QTime::currentTime()返回当前的系统时间.QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)使⽤参数format指定的格式根据参数string指定的时间返回⼀个时间对象。
qt qtimer用法
qt qtimer用法Qt是一款桌面应用程序开发跨平台的C++库,它可以让开发者构建自己的应用程序,使用更少的代码,更快的速度实现目标。
Qt的QTimer(定时器)是一种用来定时执行任务的精确工具,可以在指定的时间间隔内重复执行某个动作。
QTimer是Qt库中最常用的定时器之一,广泛用于GUI应用程序。
QTimer提供了两种定时器机制:一种是简单的单次计时,另一种是可以多次重复计时。
QTimer默认情况下是启动就运行的,可以通过函数start()来自定义定时器的工作模式、时钟间隔以及在定时器到期时需要执行的动作。
QTimer的基本操作就是设置一定的间隔时间,当时间到达时,定时器会发出一个信号来指示时间已到。
使用QTimer,可以延迟一段时间来执行一些特定的任务,这种机制可以在很多地方使用。
QTimer类的基本用法是:为QTimer对象设置一定的时间间隔,然后使用start()函数启动它;当时间到达指定的间隔时,QTimer对象会发出一个信号,从而触发我们指定的槽函数来执行特定的任务,可以使用timeout()函数来获得它发出的信号,这个信号默认情况下是使用毫秒作为间隔单位;然后,可以用stop()函数停止定时器,也可以使用reset()函数重置定时器,重新设置定时器时间,重新开始计时。
QTimer的实现原理是让应用程序在指定的间隔内处理一个或多个事件,而不是立即运行这些事件。
通常情况下,定时器会在指定间隔结束时被调用。
QTimer可以跟踪应用程序的运行时间,并在指定的时间点启动特定的任务。
QTimer类还提供了一系列的函数来控制定时器的工作模式,比如可以配置定时器的时间间隔、可以重置定时器时间间隔、可以停止定时器等等。
QTimer是一种功能强大的工具,可以实现很多复杂的任务。
例如,可以使用QTimer来实现定时刷新GUI窗口或处理网络请求,可以使用它来实现定时处理数据库操作,可以使用它来实现定时读取文件,定时发送邮件等等,从而实现实时运行程序的功能。
qt中的时间定时函数
qt中的时间定时函数在Qt中,定时器是用于在特定时间间隔后触发事件的一种机制。
Qt提供了几种定时器,包括`QTimer`、`QMetaTimer` 和`QSequentialTimer`。
这里,我将重点介绍`QTimer`,因为它是最常用的定时器。
### QTimer`QTimer` 类是一个非常灵活的定时器,可以在指定的时间间隔后触发一个槽函数。
它不是基于系统的计时器,而是基于`QObject` 的事件循环。
### 创建和使用QTimer下面是一个简单的例子,展示了如何使用`QTimer`:```cpp#include <QCoreApplication>#include <QTimer>#include <QDebug>void onTimeout() {qDebug() << "Timer timeout!";}int main(int argc, char argv[]) {QCoreApplication a(argc, argv);QTimer timer;QObject::connect(&timer, &QTimer::timeout, &onTimeout);timer.start(1000); // 设置定时器间隔为1000毫秒(1秒)return a.exec();}```在这个例子中:1. 首先,我们包含了必要的头文件。
2. 定义了一个槽函数`onTimeout`,这个函数将在定时器超时时被调用。
3. 在`main` 函数中,我们创建了一个`QCoreApplication` 实例和一个`QTimer` 实例。
4. 使用`QObject::connect` 将`QTimer::timeout` 信号连接到`onTimeout` 槽函数。
5. 使用`timer.start(1000)` 设置定时器的超时时间为1000毫秒(1秒)。
qt qtimer用法
qt qtimer用法QTimer是Qt框架中的一个定时器类,应用程序中可以使用它来定期执行指定的操作。
它提供了一种简便的方法来控制时间流逝,可以帮助程序按时完成指定的工作。
本文将介绍QTimer的用法,并详细讲解它的功能及其应用。
第二部分:QTimer的用法(1)创建一个QTimer对象使用QTimer类的第一步是创建一个QTimer对象,可以使用Qt 提供的构造函数。
该对象可以是全局变量,也可以是局部变量。
(2)设置定时器的超时时间QTimer的超时时间可以使用setInterval()函数来设置,比如要设置1秒的超时时间,可以使用如下代码:timer.setInterval(1000); //1000ms = 1 second (3)设置定时器的回调函数定时器超时后,可以调用一个回调函数,也可以使用Qt提供的信号槽机制来完成。
首先,需要创建一个QObject对象(或者QWidget 对象),来接收定时器的信号,然后使用connect()函数来连接QTimer 的timeout()信号和接收信号的对象的槽函数:QObject * receiver = new QObject();QObject::connect(&timer, &QTimer::timeout, receiver,&QObject::onTimeout);(4)启动定时器定时器设置完成后,可以使用start()函数启动定时器:timer.start();第三部分:QTimer的应用QTimer有很多应用,下面列举几个:1.使用定时器来控制程序的主要流程。
例如,可以使用定时器来启动程序的某个特定任务,或者每隔一段时间就检查程序的状态。
2.使用定时器来更新UI界面的显示。
例如,当用户操作完毕后,可以通过定时器来定期更新UI界面的显示,以便让用户及时看到新的信息。
3.使用定时器来执行一些后台任务。
例如,可以使用定时器来定期检查数据库中的某些字段,或者检查网络中的某些状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.Qt中的时间
QDate --------- 年月日
QTime --------- 时分秒
QDateTime ----- 年月日时分秒
1.获取系统当前时间
static QTime QTime::currentTime();
2.转成字符串
QString toString(QString &format)const;
format:转换的格式
10:43:13 format="hh:mm:ss"======>"10:43:13"
二.Qt中的定时器
1.Qobxxxxject类中自带定时器
(1)启动定时器
int Qobxxxxject::startTimer(int initvaltimetype)
initval:表示定时器时间长度单位是ms
timetype:表示计数精度采用默认
返回定时器id
(2)关闭定时器
void Qobxxxxject::killTimer(int id)
(3)定时处理函数
当定时时间到自动调用该函数
void Qobxxxxject::timerEvent(QTimerEvent *event)
Qt中需要设置定时器定时时间到以后要执行操作,可以在在对应的类中重写定时处理函数
2.QTimer定时器
(1)构造QTimer对象
(2)启动定时器
void start(int msec);//设置+启动
msec:定时时间毫秒
int interval()const;//启动定时器
int setInterval(int msec);//设置定时时间
(3)暂停定时器
void stop();
(4)定时任务信号
signal:
void timeout();
当定时器时间到了自动发送timeout的超时信号,将超时信号连接到自己的槽函数,在槽函数中执行超时处理代码
三.Qt中的图片显示
1.与图片处理相关的对象
QPicture
QImage
QPixmap
以上的类都可以用来管理图片,以QPixmap使用时只需要传递图片的路径给QPixmap对象就可以了
2.显示图片
使用QLabel直接显示图片
也可以通过QPainter来绘制图形图片
四.Qt的事件处理
事件处理属于Qt的基本通信机制,信号和槽也属于事件处理机制,目的是处理各项需要处理的事物
1.Qt事件发生
既可以通过窗口系统某个动作产生,也可以直接通过代码产生(很少使用)
2.事件的定义
QEvent类定义Qt中的事件,常见的需要处理的窗口系统事件都有对应的类:
QKeyEvent(按键事件)
QMouseEvent(鼠标事件)
QPaintEvent(图像处理事件)
QResizeEvent(窗口大小改变事件)
QMoveEvent(窗口移动事件)
QTimerEvent(系统内部定时器事件)
3.事件的处理
以点击鼠标事件为例
(1)重写特定事件的事件处理器 ---------- 子类继承
void QMoveEvent::QMoveEvent(const QPoint &posconst QPoint &oldpos)
[MISSING IMAGE: , ]
(2)重写Qobxxxxject类中所有事件的事件处理虚函数
bool Qobxxxxject::event(QEvent *event);
[MISSING IMAGE: , ]
(3)程序中QCoreApplication类中捕获事件总接口(notify) -------- 子类继承(在QApplocation 的子类中重写notify)
bool QCoreApplication::notify(Qobxxxxject *receiverQEvent *event);//给哪个对象发送什么事件
[MISSING IMAGE: , ]
(4)事件过滤器
事件过滤器的作用对某些特殊事件进行过滤(特殊处理),处理完后可以选择继续交给下一层,也可以就此处理结束
事件过滤器处于notify和event之间
用法:
安装过滤器 ------- void Qobxxxxject::installEventFilter(Qobxxxxject *filter/*观察者类*/);
[MISSING IMAGE: , ]
重写过滤器处理函数 --------- bool Qobxxxxject::eventFilter(Qobxxxxject *watched/*观察者*/QEvent *event);
[MISSING IMAGE: , ]
(5)Qt中事件的处理顺序
注意:事件处理的四个流程并不是每次使用都要对其进行重写,而是选择合适的位置来处理对应的事件。