当前位置:首页 » 净水方式 » 安装事件过滤器

安装事件过滤器

发布时间: 2021-01-02 22:51:04

『壹』 qt4 tableWidget 怎么给每个单元格加上时间过滤器installEventFilter分数没用我送几个Q币好了

Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理。
假设我们有一个CustomerInfoDialog控件,由一些QLineEdit控件组成。我们希望使用Space键得到下一个QLineEdit的输入焦点。一个最直接的方法是继承QLineEdit重写keyPressEvent()函数,当点击了Space键时,调用focusNextChild():
void MyLineEdit::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Space) {
focusNextChild();
} else {
QLineEdit::keyPressEvent(event);
}
}
这个方法有一个最大的缺点:如果我们在窗体中使用了很多不同类型的控件(QComboBox,QSpinBox等等),我们也要继承这些控件,重写它们的keyPressEvent()。一个更好的解决方法是让CustomerInfoDialog监视其子控件的键盘事件,在监视代码处实现以上功能。这就是事件过滤的方法。实现一个事件过滤包括两个步骤:
1. 在目标对象上调用installEventFilter(),注册监视对象。
2. 在监视对象的eventFilter()函数中处理目标对象的事件。
注册监视对象的位置是在CustomerInfoDialog的构造函数中:
CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)
: QDialog(parent)
{
...
firstNameEdit->installEventFilter(this);
lastNameEdit->installEventFilter(this);
cityEdit->installEventFilter(this);
phoneNumberEdit->installEventFilter(this);
}
事件过滤器注册后,发送到firstNameEdit,lastNameEdit,cityEdit,phoneNumberEdit控件的事件首先到达CustomerInfoDialog::eventFilter()函数,然后在到达最终的目的地。
下面是eventFilter()函数的代码:
bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
{
if (target == firstNameEdit || target == lastNameEdit
|| target == cityEdit || target == phoneNumberEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast(event);
if (keyEvent->key() == Qt::Key_Space) {
focusNextChild();
return true;
}
}
}
return QDialog::eventFilter(target, event);
}
首先,我们看是目标控件是否为QLineEdit,如果事件为键盘事件,把QEvent转换为QKeyEvent,确定被敲击的键。如果为Space键,调用focusNextChild(),把焦点交给下一个控件,返回true通知Qt已经处理了这个事件,如果返回false,Qt将会把事件传递给目标控件,把一个空格字符插入到QLineEdit中。
如果目标控件不是QLineEdit,或者事件不是Space敲击事件,把控制权交给基类QDialog的eventFilter()。目标控件也可以是基类QDialog正在监视的控件。(在Qt4.1中,QDialog没有监视的控件,但是Qt的其他控件类,如QScrollArea,监视一些它们的子控件)

Qt的事件处理有5中级别:
1. 重写控件的事件处理函数:如重写keyPressEvent(),mousePressEvent()和paintEvent(),这是最常用的事件处理方法,我们已经看到过很多这样的例子了。
2. 重写QObject::event(),在事件到达事件处理函数时处理它。在需要改变Tab键的惯用法时这样做。也可以处理那些没有特定事件处理函数的比较少见的事件类型(例如,QEvent::HoverEnter)。我们重写event()时,必须要调用基类的event(),由基类处理我们不需要处理的那些情况。
3. 给QObject对象安装事件过滤器:对象用installEventFilter()后,所有达到目标控件的事件都首先到达监视对象的eventFilter()函数。如果一个对象有多个事件过滤器,过滤器按顺序激活,先到达最近安装的监视对象,最后到达最先安装的监视对象。
4. 给QApplication安装事件过滤器,如果qApp(唯一的QApplication对象)安装了事件过滤器,程序中所有对象的事件都要送到eventFilter()函数中。这个方法在调试的时候非常有用,在处理非活动状态控件的鼠标事件时这个方法也很常用。
5. 继承QApplication,重写notify()。Qt调用QApplication::nofity()来发送事件。重写这个函数是在其他事件过滤器处理事件前得到所有事件的唯一方法。通常事件过滤器是最有用的,因为在同一时间,可以有任意数量的事件过滤器,但是notify()函数只有一个。
许多事件类型,包括鼠标,键盘事件,是能够传播的。如果事件在到达目标对象的途中或者由目标对象处理掉,事件处理的过程会重新开始,不同的是这时的目标对象是原目标对象的父控件。这样从父控件再到父控件,知道有控件处理这个事件或者到达了最顶级的那个控件。
图7.2显示了一个键盘事件在一个对话框中从子控件到父控件的传播过程。当用户敲击一个键盘,时间首先发送到有焦点的控件上(这个例子中是QCheckBox)。如果QCheckBox没有处理这个事件,Qt把事件发送到QGroupBox中,如果仍然没有处理,则最后发送到QDialog中。

『贰』 关于Qt的事件过滤器

monitoredObj是你要监控事件的对象filterObj是你要在里边进行处理对象名

『叁』 安装事件过滤器后控件隐藏了怎么回事

不锈钢刷式过滤器种类有:全自动不锈钢刷式过滤器,手摇不锈钢刷式过滤器。其主要作用就是除掉水里的悬浮物,降低水里的悬浮物浓度,颗粒物,降低浊度,净化水质,减少系统污垢、菌藻、锈蚀,净化水质等。

不锈钢刷式过滤器采用专利技术的内部机械结构,实现了真正意义上的高压反冲洗功能,可轻松彻底地清除滤网截留的杂质,清洗无死角,通量无衰减,保障了过滤效率和长久的使用寿命。

不锈钢刷式过滤器通过

『肆』 qt qlineedit怎样使用事件过滤器

自己定义类继承qlineedit, 实现eventFilter函数

『伍』 Qt怎样使用事件过滤器

设置事件过滤器时用设置其viewport的事件过滤实例:#include #include QTextEdit* pEdit = new QTextEdit(this);pEdit->viewport()->installEventFilter(this);bool xxx::eventFilter(QObject* o, QEvent* e){ Q_UNUSED(o); if(e->type() == QEvent::MouseButtonPress){ QMouseEvent* pMe = static_cast(e); qDebug() pos(); } return false;}

『陆』 qt事件过滤器能不能统一处理所有按钮对象的事件

当一个事件产生时,Qt 通过实例化一个 QEvent 的合适的子类来表示它,然后通过调用 event() 函数发送给 QObject 的实回例(或者它的子答类)。
event() 函数本身并不会处理事件,根据事件类型,它将调用相应的事件处理函数,并且返回事件被接受还是被忽略。
一些事件,比如 QMouseEvent 和 QKeyEvent,来自窗口系统;有的,比如 QTimerEvent,来自于其他事件源;另外一些则来自应用程序本身。

『柒』 qt事件过滤器中为什么同一个键盘事件连续触发多次

添加个标记int flag = 0。每次接收到事件时判断是否falg == 1,如果是就不做任何处理直接返回,否则将flag设为1并进行处理。在接收到按键弹起消息时再将falg重置为0.

『捌』 Qt怎样使用事件过滤器

设置事件过滤器时用设置其viewport的事件内过滤实例:容#include #include QTextEdit* pEdit = new QTextEdit(this);pEdit->viewport()->installEventFilter(this);bool xxx::eventFilter(QObject* o, QEvent* e){ Q_UNUSED(o); if(e->type() == QEvent::MouseButtonPress){ QMouseEvent* pMe = static_cast(e); qDebug() pos(); } return false;}

热点内容
丁度巴拉斯情人电影推荐 发布:2024-08-19 09:13:07 浏览:886
类似深水的露点电影 发布:2024-08-19 09:10:12 浏览:80
《消失的眼角膜》2电影 发布:2024-08-19 08:34:43 浏览:878
私人影院什么电影好看 发布:2024-08-19 08:33:32 浏览:593
干 B 发布:2024-08-19 08:30:21 浏览:910
夜晚看片网站 发布:2024-08-19 08:20:59 浏览:440
台湾男同电影《越界》 发布:2024-08-19 08:04:35 浏览:290
看电影选座位追女孩 发布:2024-08-19 07:54:42 浏览:975
日本a级爱情 发布:2024-08-19 07:30:38 浏览:832
生活中的玛丽类似电影 发布:2024-08-19 07:26:46 浏览:239