一、事件处理器
事件是由窗口系统或者Qt自身产生的,以响应各类事件。当用户按下键盘或者鼠标就会产生相关事件,系统会捕捉到该事件。在使用Qt进行编程时,基本不需要考虑事件,因为发生事件时,Qt会自己发出信号,不过自定义窗口就要特别注意了。
不应该混淆“事件“和”信号”这两个概念。一般情况下,在使用窗口部件时候,信号是十分有用的;而实现窗口部件,事件则十分有用哦~
换句话说,在使用QPushButton时候,clicked()信号会更有用,但是需要实现类似QPushButton功能的类编写事件代码会更有效。
Qt中,事件就是QEvent子类的一个实例。Qt处理的事件类型非常多,每一种事件都有一个枚举类型值对应。例如:QEvent::type()可以返回处理鼠标事件的QEvent::MouseButtonPress。
通过重新实现事件函数可以打到你自己的目的。在前面几章中也有事件使用实例,回顾一下,温故知新。
这里说明另外一种事件,定时器事件。定时器事件允许应用程序可以再一定的时间间隔后执行事件处理。定时器事件可以用来实现光标的闪烁和其他的动画播放,或者只是简单的刷新。下面给出一个滚动字母例子:
头文件
#ifndef TICKER_H
#define TICKER_H
#include <QWidget>
class Ticker : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText)
public:
Ticker(QWidget *parent = 0);
void setText(const QString &newText);
QString text() const { return myText; }
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent *event);
void timerEvent(QTimerEvent *event);
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);
private:
QString myText;
int offset;
int myTimerId;
};
#endif
从新实现事件处理器:
protected:
void paintEvent(QPaintEvent *event);
void timerEvent(QTimerEvent *event);
void showEvent(QShowEvent *event);
void hideEvent(QHideEvent *event);