pyqt事件过滤器的使用(eventFilter)

# -*- coding: cp936 -*-

#由于现在不是很明白:事件过滤器的使用(eventFilter),先收藏着

from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):

def __init__(self):

QtGui.QMainWindow.__init__(self)

widget = QtGui.QWidget(self)

layout = QtGui.QVBoxLayout(widget)

self.edit = QtGui.QLineEdit(self)

self.list = QtGui.QListWidget(self)

layout.addWidget(self.edit)

layout.addWidget(self.list)

self.setCentralWidget(widget)

self.edit.installEventFilter(self)#在窗体上为self.edit安装过滤器

#QEvent::FocusIn(获得焦点事件)

"""

QPalette p=QPalette();

p.setColor(QPalette::Base,Qt::green);

ui->lineEdit1->setPalette(p);

QEvent::FocusOut失去焦点

"""

self.list.installEventFilter(self)

def eventFilter(self, source, event):

if event.type() == QtCore.QEvent.MouseMove:

if event.buttons() == QtCore.Qt.NoButton:

pos = event.pos()

self.edit.setText(‘x: %d, y: %d‘ % (pos.x(), pos.y()))

else:

pass # do other stuff

return QtGui.QMainWindow.eventFilter(self, source, event)#将事件交给上层对话框

if __name__ == ‘__main__‘:

import sys

app = QtGui.QApplication(sys.argv)

win = Window()

win.show()

app.installEventFilter(win)

sys.exit(app.exec_())

pyqt事件过滤器的使用(eventFilter),布布扣,bubuko.com

时间: 2024-10-22 11:37:16

pyqt事件过滤器的使用(eventFilter)的相关文章

pyqt事件过滤器的使用(eventFilter)(不太明白)

pyqt事件过滤器的使用(eventFilter) 阅读13次 2014/8/5 19:47:24 # -*- coding: cp936 -*- #由于现在不是很明白:事件过滤器的使用(eventFilter),先收藏着 from PyQt4 import QtGui, QtCore class Window(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) widget = QtGui.QWidg

QSlider解决点击不能到该位置问题

方法一:可以继承重写一个QSlider 方法二:1.instaneventfiliter(this);slider安装一个事件过滤器 2.在eventfilter(QObject *,QEvent*)中拦截它,很简单吧 例子: slider=new QSlider(this); slider->installEventFilter(this); bool trayIconMenu::eventFilter(QObject *obj, QEvent *event) { if(obj==slider

Qt 事件处理

1.事件过滤器 bool QObject::eventFilter(QObject * watched, QEvent * event) [virtual] 2.统一的 bool QObject::event(QEvent * e) [virtual] bool QWidget::event(QEvent * event) [virtual protected] 3.特殊事件  closeEvent(), focusInEvent(), focusOutEvent(), enterEvent()

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

[QT]在子窗口或者控件中绘图

要在子窗口中绘图,有2种方法: 1.重写子窗口的控件类(即继承该类,并重载其paintEvent()方法),实现其paintEvent()方法,然后在ui里面将原来的控件提升(promote to)为新类. (注:使用QPainter画图时,只能指定所属为当前类的引用Qpainter painter = new QPainter(this),所以应重写paintEvent()) 填写好新类的类名及头文件名. 2.使用事件过滤器,重写eventFilter(),在子窗口或控件中注册事件过滤器(in

QT 事件过滤器 eventFilter

在监测的代码里执行需要的行为. 这可以用event Filter来达到. 设置一个event filter有两个步骤: 1. 在目标对象上调用installEventFilter(),将监测对象注册到目标对象上.2. 在监测对象的eventFilter()方法里处理目标对象的事件. 在ctor里注册监测对象是一个好地方:CustomerInfoDialog::CustomerInfoDialog(QWidget *parent) :QDialog(parent){    ...    first

QT学习 之 事件与事件过滤器(分为五个层次)

事件 在Qt中,事件是作为对象处理的,所有事件对象继承自抽象类QEvent.此类用来表示程序内部发生或者来自于外部但应用程序应该知道的动作.事件能够能过被 QObject 的子类接受或者处理,但是通常用在与组件有关的应用中.本文主要阐述了在一个典型应用中的事件接收与处理. 事件的传递发送 当一个事件产生时,Qt 通过实例化一个 QEvent 的合适的子类来表示它,然后通过调用 event() 函数发送给 QObject 的实例(或者它的子类). event() 函数本身并不会处理事件,根据事件类

Qt中如何禁掉所有UI操作以及注意事项(处理各个widget的eventFilter这一层,但是感觉不好,为什么不使用QApplication呢)

刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多线程上去解决,但是比较困难:后来只能从另外一条路来解决,那就是:当语音识别进行时:禁掉一切用户操作! 所谓的禁掉一切UI操作,在手机等手持设备上,尤其是纯触摸屏的设备上,主要就是指的禁止mouse操作!当然了:也可能是禁止键盘操作等.那如何去做这一点呢? 方法:我们可以截获禁止操作的窗口的所有eve

QT事件过滤器(全局过滤,省事)

Qt事件模型一个真正强大的特色是一个QObject 的实例能够管理另一个QObject 实例的事件. 让我们试着设想已经有了一个CustomerInfoDialog的小部件.CustomerInfoDialog 包含一系列QLineEdit. 现在,我们想用空格键来代替Tab,使焦点在这些QLineEdit间切换. 一个解决的方法是子类化QLineEdit,重新实现keyPressEvent(),并在keyPressEvent()里调用focusNextChild().像下面这样: void M