第七章 Qt事件(event)处理

一、事件处理器    

    事件是由窗口系统或者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);
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值