qt中重写键盘事件冲突了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt中重写键盘事件冲突了相关的知识,希望对你有一定的参考价值。

参考技术A qt框架键盘事件和其快捷键系统的关系 从调用堆栈和源码结构来看,可以得出的结论是当键盘...

事件(QEvent*)与 mousePressEvent(QMouseEvent *)冲突?

【中文标题】事件(QEvent*)与 mousePressEvent(QMouseEvent *)冲突?【英文标题】:event(QEvent*) conflicts with mousePressEvent(QMouseEvent *)? 【发布时间】:2012-09-30 05:38:08 【问题描述】:

在 QT 中:我使用从 QToolButton 继承的类并重写 event(QEvent*),现在我想添加“mousePressEvent”,但它永远不会被击中,event(QEvent*) 是否与 mousePressEvent(QMouseEvent *) 冲突?谢谢。

bool IconLabel::event (QEvent* e ) 
   if ( e->type() == QEvent::Paint) 
      return QToolButton::event(e);

   
   return true;

void IconLabel::mousePressEvent(QMouseEvent* e)

   int a = 1;//example
    a = 2;// example//Handle the event

班级是:

class IconLabel : public QToolButton

    Q_OBJECT
public:
    explicit IconLabel(QWidget *parent = 0);
    bool event (QEvent* e );
    void mousePressEvent(QMouseEvent* e);
signals:

public slots:

;

【问题讨论】:

【参考方案1】:

小部件接收到的所有事件都通过event(..),然后被重定向到适当的事件处理方法。您犯了一个错误,即不转发除绘制事件之外的任何事件,如果您只想添加鼠标按下事件处理,请执行以下操作:

bool IconLabel::event (QEvent* e ) 
    if ( e->type() == QEvent::Paint ||
         e->type() == QEvent::QEvent::MouseButtonPress ) 
        return QToolButton::event(e);
    
    return true;

事件处理方法也应该在protected 中,因为事件只应该通过事件队列(QCoreApplication::postEvent(..) 等)分发。

【讨论】:

坦克!那么我怎样才能使'mousePressEvent'的功能起作用?或达到相同的效果?(我想首先显示一个图标和一些文本(外观)QToolButton,但我不想要QToolButton的其他行为。后来我想要获取'mousePress'事件并做一些事情(那是:当鼠标点击按钮时,我有处理事件的函数))

以上是关于qt中重写键盘事件冲突了的主要内容,如果未能解决你的问题,请参考以下文章

QT 捕获事件(全局拦截)

qt的键盘事件

QWidget QLabel没有响应keyEvent键盘事件

QWidget QLabel没有响应keyEvent键盘事件

Qt(Ubuntu)怎么实现模拟鼠标事件和键盘事件?

Qt中的键盘事件,以及焦点的设置(比较详细)