【引用】qt QEvent paintEvent
来源:互联网 发布:爆吧软件2016 编辑:程序博客网 时间:2024/05/18 10:55
QEvent
qt 的主消息循环QCoreApplication::exec()从消息队列中取出系统事件(system event),将它们翻译
为QEvent,并将其发送到QObject
除了用户操作引发的QEvent,还可以手动发送:QCoreApplication::sendEvent()或postEvent()
注意:QCoreApplication是QApplication的父类
接收到QEvent的QObject会调用它们对应的:***event(),这些函数一般都要被重载。
QEvent 有两个成员变量:一个事件类型和一个是否接收的标志。accept()和ignore()可以设置这个标志。
*******************************************************************************************
QObject::installEventFilter()允许一个对象截获本该发到其它对象的事件。
void QObject::installEventFilter ( QObject * filterObj )
它将一个事件过滤器安装到一个QObject中。事件过滤器接收宿主QObject的所有events,它既可以不接收,也可以将其发送到宿主QObject。事件过滤器本身也是一个QObject,它通过自己的eventFilter() 函数
来接收事件。如果该函数返回true,那么表示该事件已经被处理了,不需要调用默认的事件处理程序。反之,则交给默认事件处理程序处理。一个QObject可以安装多个事件过滤器,但最后安装的那个会最先激活。
eg:建立一个事件过滤器:
class KeyPressEater : public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
qDebug("Ate key press %d", keyEvent->key());
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
除此之外
EventFilter QCoreApplication::setEventFilter ( EventFilter filter )也可设定
它设置了事件过滤器,并将以前设置的过滤器返回(如果有的话)
filter这里不是一个对象,而是一个函数名,其功能和事件过滤器的eventFilter()一样。
eg:定义一个filter函数
bool myEventFilter(void *message, long *result);
***********************************************************************************
void QWidget::paintEvent ( QPaintEvent * event )
处理事件的函数也称为event handler,上面的函数可以在子类中重载以响应paint事件。
一个paint事件对应一个重绘整个窗口或部分窗口的要求,它可以在调用repaint()或update()后产生。
重绘的无效区域是QPaintEvent::region()。update在调用时会合并多个无效区域,而repaint是立即执行
重绘是在QWidget的background上进行的,可通过setBackgroundRole() 和setPalette()进行设置。
Qt4.0以上版本支持双缓存重绘,但在其它版本需要编写双缓存的实现代码。
在X11下可以调用qt_x11_set_global_double_buffer()实现。
*******qt会隔一段时间自动的调用repaint函数??
*******不要在 paintEvent()里面调用update() repaint()
*******在Qtopia 4.1.x系列里,默认情况下要使用QPainter画图必须在在paintEvent()函数里,如果在其它地方的话,运行时会提示如下错误
QPainter::begin: Widget painting can on
要避免这个问题可以设置你要画图的那个widget的一个属性,加上类似这样的代码this->setAttribute(Qt::WA_PaintOutsidePaintEvent);就可以了。
- 【引用】qt QEvent paintEvent
- Qt的QEvent::accept()和QEvent::ignore()
- Qt中的QEvent简例
- Qt 基础:QEvent
- Qt之QEvent
- Qt之QEvent
- Qt事件类 QEvent
- Qt paintEvent绘制窗体
- Qt paintevent事件
- Qt paintevent事件
- Qt paintevent 事件
- QT 绘制事件 PaintEvent
- Qt paintevent事件
- Qt paintevent事件
- Qt paintEvent事件
- QT之paintEvent事件
- Qt paintevent事件浅谈
- QT之paintEvent事件
- 【引用】基于ARM的局域网聊天、会议终端通讯设备
- 【引用】Qt中发送与接收信息的编码转换
- Qwt安装 及如何集成到Creator中!!
- linux之getopt 函数
- 模拟时钟例程
- 【引用】qt QEvent paintEvent
- QT开发之deigner+汉字显示等相关问题
- 【引用】QT设置皮肤问题?
- s3c2440定时器
- 【引用】QML语言介绍
- 【引用】转载:QML 学习
- 基于DSP的电力设备功率因数多种检测方式的应用
- stm32学习
- ADC循环采集六路电压(转)