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中重写键盘事件冲突了的主要内容,如果未能解决你的问题,请参考以下文章
QWidget QLabel没有响应keyEvent键盘事件