C++ GUI Qt4学习笔记07

 

C++ GUI Qt4 

 

        事件(event)是由串口系统或者Qt自身产生的,用以响应所发生的各类事情。当用户按下或者松开键盘或者鼠标上的按键时,就可以产生一个键盘或者鼠标事件;当某个窗口第一次显示的时候,就会产生一个绘制事件。用来告知窗口需要重绘制它本身,从而使得该窗口可见。

        使用Qt进行编程开发时,基本不需要考虑事件,Qt窗口部件都会发射信号。但是当我们需要编写自己的自定义窗口部件,或者是当我们希望改变已经存在的Qt窗口部件的行为时,事件就变得非常有用了。

        事件和信号是两个概念。在使用窗口部件时,信号是十分有用的,而在实现窗口部件时,事件则是十分有用的。

7.1重新实现事件处理器

        在Qt中,事件就是QEvent子类的一个实例。

7.2安装事件过滤器

        Qt事件模型一个非常强大的功能是:QObject实例在看到它自己的事件之前,可以通过设置另外一个QObject实例先监视这个事件。

7.3处理密集时的相应保持

        当调用QApplication:exec()时,就启动了Qt的事件循环。在开始时,Qt会发出一些事件命令来显示和绘制窗口部件。在这之后,事件循环就开始运行,它不断检查是否有事件发生并且把这个事件发送给应用程序的QObject。

 

定时器事件,定时器事件允许应用程序可以再一定的时间间隔后执行事件处理。定时器事件可以用来实现光标的闪烁和其他动画的播放,或者只简单地用作显示的刷新。

Ticker窗口部件实例:显示了一串文本标语,每30毫秒向左移动一个像素,如果窗口部件比文本宽,那么文本将会被多次重复,直到能够填满整个窗口部件的宽度为止。

 源码如下:

ticker.h

[cpp]  view plain copy
 
  1. #ifndef TICKER_H  
  2. #define TICKER_H  
  3.   
  4. #include <QWidget>  
  5.   
  6. class Ticker : public QWidget  
  7. {  
  8.     Q_OBJECT  
  9.     Q_PROPERTY(QString text READ text WRITE setText)  
  10.   
  11. public:  
  12.     Ticker(QWidget *parent = 0);    //析构  
  13.   
  14.     void setText(const QString &newText);   //设置要显示的文本  
  15.     QString text() const { return myText; }  
  16.     QSize sizeHint() const;  
  17.   
  18. protected:  
  19.     void paintEvent(QPaintEvent *event);  
  20.     void timerEvent(QTimerEvent *event);  
  21.     void showEvent(QShowEvent *event);  
  22.     void hideEvent(QHideEvent *event);  
  23.   
  24. private:  
  25.     QString myText;  
  26.     int offset;  
  27.     int myTimerId;  
  28. };  
  29.   
  30. #endif  

ticker.cpp

[cpp]  view plain copy
 
  1. #include <QtGui>  
  2.   
  3. #include "ticker.h"  
  4.   
  5. Ticker::Ticker(QWidget *parent)  
  6.     : QWidget(parent)  
  7. {  
  8.     offset = 0;  
  9.     myTimerId = 0;  
  10. }  
  11.   
  12. void Ticker::setText(const QString &newText)    //设置要显示的文本  
  13. {  
  14.     myText = newText;  
  15.     update();   //强制执行一个重绘操作  
  16.     updateGeometry();   //通知对Ticker窗口部件负责的任意布局管理器,提示该窗口部件的大小发生了变化。  
  17. }  
  18.   
  19. QSize Ticker::sizeHint() const  //返回文本所需的空间大小,并以此作为窗口部件的理想尺寸。  
  20. {  
  21.     return fontMetrics().size(0, text());   //返回一个QFontMetrics对象,可以用这个对象查询并获得与这个窗口部件字体相关的信息  
  22. }  
  23.   
  24. void Ticker::paintEvent(QPaintEvent * /* event */)  //使用QPainter::drawText()绘制文本  
  25. {  
  26.     QPainter painter(this);  
  27.   
  28.     int textWidth = fontMetrics().width(text());    //使用fontMetrics()确定文本在水平方向上所需的空间  
  29.     if (textWidth < 1)  
  30.         return;  
  31.     int x = -offset;  
  32.     while (x < width()) {                //考虑offset的值,多次绘制文本,填充整个窗口部件的宽度为止  
  33.         painter.drawText(x, 0, textWidth, height(),  
  34.                          Qt::AlignLeft | Qt::AlignVCenter, text());  
  35.         x += textWidth;  
  36.     }  
  37. }  
  38.   
  39. void Ticker::showEvent(QShowEvent * /* event */)    //启动定时器  
  40. {  
  41.     myTimerId = startTimer(30);  
  42. }  
  43.   
  44. void Ticker::timerEvent(QTimerEvent *event)  
  45. {  
  46.     if (event->timerId() == myTimerId) {  
  47.         ++offset;  
  48.         if (offset >= fontMetrics().width(text()))  
  49.             offset = 0;  
  50.         scroll(-1, 0);  //把窗口部件的内容向左滚动一个像素  
  51.     } else {  
  52.         QWidget::timerEvent(event);  
  53.     }  
  54. }  
  55.   
  56. void Ticker::hideEvent(QHideEvent * /* event */)  
  57. {  
  58.     killTimer(myTimerId);   停止定时器  
  59.     myTimerId = 0;  
  60. }  

转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3816220.html

C++ GUI Qt4编程(第二版)》一书所有源代码下载地址:http://download.youkuaiyun.com/source/3402597。 《C++ GUI Qt4编程(第二版)》,英文名《C++ GUI Programming with Qt4,Second Edition》,作者:【加拿大】Jasmin Blanchette、【英】Mark Summerfield,翻译:闫锋欣、曾泉人、张志强,审校:周莉娜、赵延兵,出版社:电子工业出版社,ISBN:9787121070389,PDF 格式,大小 155Mb。被压缩为 3 部分,本资源是第一部分:第一部分下载地址:http://download.youkuaiyun.com/source/3397783;第二部分下载地址:http://download.youkuaiyun.com/source/3397770;第三部分下载地址:http://download.youkuaiyun.com/source/3397766。 三个资源在一起解压缩后(windows 平台下解压缩)即可得到《C++ GUI Qt4编程(第二版)》.pdf 一书。 内容简介: 本书详细讲述了用最新的qt版本进行图形用户界面应用程序开发的各个方面。前5章主要涉及qt基础知识,后两个部分主要讲解qt的中高级编程,包括布局管理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、xml、国际化、嵌入式编程等内容。对于本书讲授的大量qt4编程原理和实践,都可以轻易将其应用于qt44qt4.5以及后续版本的qt程序开发过程中。   本书适合对qt编程感兴趣的程序员以及广大计算机编程爱好者阅读,也可作为相关机构的培训教材。 目录: 第一部分 qt基础  第1章 qt入门                   第2章 创建对话框           第3章 创建主窗口                  第4章 实现应用程序的功能        第5章 创建自定义窗口部件      第二部分 qt中级  第6章 布局管理  第7章 事件处理  第8章 二维图形  第9章 拖放  第10章 项视图类  第11章 容器类  第12章 输入与输出  第13章 数据库  第14章 多线程  第15章 网络  第16章 xml  第17章 提供在线帮助 第三部分 qt高级 . 第18章 国际经  第19章 自定义外观  第20章 三维图形  第21章 创建插件  第22章 应用程序脚本  第23章 平台相关特性  第24章 嵌入性编程第四部分  附录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值