C++ GUI Qt4学习笔记(七)
来源:互联网 发布:最新免费手机电影软件 编辑:程序博客网 时间:2024/06/05 08:58
事件(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
#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
ticker.cpp
#include <QtGui>#include "ticker.h"Ticker::Ticker(QWidget *parent) : QWidget(parent){ offset = 0; myTimerId = 0;}void Ticker::setText(const QString &newText)//设置要显示的文本{ myText = newText; update();//强制执行一个重绘操作 updateGeometry();//通知对Ticker窗口部件负责的任意布局管理器,提示该窗口部件的大小发生了变化。}QSize Ticker::sizeHint() const//返回文本所需的空间大小,并以此作为窗口部件的理想尺寸。{ return fontMetrics().size(0, text());//返回一个QFontMetrics对象,可以用这个对象查询并获得与这个窗口部件字体相关的信息}void Ticker::paintEvent(QPaintEvent * /* event */)//使用QPainter::drawText()绘制文本{ QPainter painter(this); int textWidth = fontMetrics().width(text());//使用fontMetrics()确定文本在水平方向上所需的空间 if (textWidth < 1) return; int x = -offset; while (x < width()) {//考虑offset的值,多次绘制文本,填充整个窗口部件的宽度为止 painter.drawText(x, 0, textWidth, height(), Qt::AlignLeft | Qt::AlignVCenter, text()); x += textWidth; }}void Ticker::showEvent(QShowEvent * /* event */)//启动定时器{ myTimerId = startTimer(30);}void Ticker::timerEvent(QTimerEvent *event){ if (event->timerId() == myTimerId) { ++offset; if (offset >= fontMetrics().width(text())) offset = 0; scroll(-1, 0);//把窗口部件的内容向左滚动一个像素 } else { QWidget::timerEvent(event); }}void Ticker::hideEvent(QHideEvent * /* event */){ killTimer(myTimerId);停止定时器 myTimerId = 0;}
- C++ GUI Qt4学习笔记(七)
- C++ GUI Qt4学习笔记(一)
- C++ GUI Qt4学习笔记(二)
- C++ GUI Qt4学习笔记(三)
- C++ GUI Qt4学习笔记(四)
- C++ GUI Qt4学习笔记(五)
- C++ GUI Qt4学习笔记(八)
- C++ GUI Qt4学习笔记(九)
- C++ GUI Qt4学习笔记(一)
- C++ GUI Qt4学习笔记(二) 创建对话框
- C++ GUI QT4编程笔记
- 《Effective C++》学习笔记(七)
- C语言程序学习(七)笔记
- 《effective c++》学习笔记(七)
- C语言学习笔记<七>
- QT之GUI学习笔记(七)----菜单和工具栏
- C++ GUI Qt4编程笔记1
- C++ GUI Programming with Qt4 学习指导
- 修改图片大小
- 一个函数实现调节录音控制麦克风输入音量
- GridControl主从表的数据绑定以及从表事件
- Flex使用ModuleLoader请记住在主程序中加入以下代码
- 如何安装MATLAB工具箱-总结
- C++ GUI Qt4学习笔记(七)
- ASN.1笔记——基本类型详述
- Eclipse简单配置使开发更快更流畅
- C#学习第四天
- request.getParameter("xxx")用EL表达式如何写
- 这几天一直在学习QT,打算趁着代码还少,把GMicaps移植到qt平台。
- Ubuntu开启ssh服务
- Google Chrome浏览器调试
- 事物在架构中的应用