QPushButton的鼠标事件处理及EventFilter事件过滤器的用法

        这两天在做一个软键盘,支持QLineEdit的输入,原来都是处理的keyPressEvent,现在用的是mousePressEvent,移植原来的代码居然不行。折腾了半天发现,QPushButton自身会处理到鼠标左键的单击事件,即使你用了事件过滤器也不行!具体验证了三种情况:

(1)QPushButton类会处理鼠标左键单击事件,不会再向父窗口传递,父窗口的eventFilter也无法捕捉这个事件。

(2)同在一个窗口的QLabel可以在父窗口eventFilter被捕捉

(3)继承QPushButton重新实现鼠标事件,还是不能被eventFilter捕捉,但是这样可以独立处理鼠标单击事件。

代码如下,有两种情况可以根据if、else进行选择编译:

1.dailog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QPushButton>

#if 0
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

    bool eventFilter(QObject *obj, QEvent *event);
    void mousePressEvent(QMouseEvent *event);    //注意这里不要写成(QKeyevent *event),否则接收不到鼠标事件
    void mouseReleaseEvent(QMouseEvent *event);   //注意这里不要写成(QKeyevent *event),否则接收不到鼠标事件
};

#else
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

    bool eventFilter(QObject 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想要禁用QPushButton鼠标事件,可以使用setEnabled(False)函数来禁用该按钮。这将禁止用户点击该按钮,并且该按钮将变为灰色,表明该按钮已被禁用。但是,如果你仍然想要该按钮显示为可用状态,但是禁用鼠标事件,你可以重写QPushButton的mousePressEvent()和mouseReleaseEvent()函数,并在这两个函数中不执行任何操作。这样,当用户点击该按钮时,虽然该按钮看起来可以被点击,但是实际上不会触发任何事件。 下面是一个示例代码: ```python from PyQt5.QtWidgets import QApplication, QPushButton, QWidget from PyQt5.QtCore import Qt class MyButton(QPushButton): def __init__(self, parent=None): super(MyButton, self).__init__(parent) def mousePressEvent(self, event): # 不执行任何操作 pass def mouseReleaseEvent(self, event): # 不执行任何操作 pass class MyWidget(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Disable Mouse Event') button = MyButton("Click me!", self) button.setGeometry(50, 50, 200, 100) button.setEnabled(True) # 将按钮设置为可用状态 if __name__ == '__main__': app = QApplication([]) widget = MyWidget() widget.show() app.exec_() ``` 在这个示例代码中,我们重新实现了QPushButton的mousePressEvent()函数和mouseReleaseEvent()函数,使这两个函数不执行任何操作。这样,当用户点击该按钮时,虽然该按钮看起来可以被点击,但是实际上不会触发任何事件。同时,我们将按钮设置为可用状态。如果你想禁用按钮的鼠标事件,只需要将按钮设置为不可用状态即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值