在国外做盗版网站,wordpress 作者页面,广州新闻最新消息10条,自己做网站如何月入3k文章目录 1. 通过自定义控件实现1.1 添加自定义控件类LabelX 2. 通过事件过滤器实现2.1 添加一个QLabel2.2 为QLabel安装事件过滤器2.3 重写eventFilter 函数 QEvent::Enter 鼠标进入事件#xff0c;当鼠标进入到窗口/控件内部时#xff0c;触发该事件#xff0c;它对应的… 文章目录 1. 通过自定义控件实现1.1 添加自定义控件类LabelX 2. 通过事件过滤器实现2.1 添加一个QLabel2.2 为QLabel安装事件过滤器2.3 重写eventFilter 函数 QEvent::Enter 鼠标进入事件当鼠标进入到窗口/控件内部时触发该事件它对应的子类是QEnterEvent
QEvent::Leave
鼠标离开事件当鼠标离开到窗口/控件内部时触发该事件
1. 通过自定义控件实现
自定义一个标签控件LabelX让它继承自QLabel然后重写父类的enterEvent和leaveEvent。
1.1 添加自定义控件类LabelX
代码如下
// 在LabelX.h 中
#ifndef LABELX_H
#define LABELX_H#include QDebug
#include QLabelclass LabelX : public QLabel {Q_OBJECT
public:explicit LabelX(QWidget *parent nullptr);protected:// 重写父类的方法void enterEvent(QEnterEvent *event);void leaveEvent(QEvent *event);signals:
};#endif // LABELX_H// 在LabelX.cpp 中
#include labelx.hLabelX::LabelX(QWidget *parent) : QLabel{parent} {}static int cnt 1;void LabelX::enterEvent(QEnterEvent *event) {Q_UNUSED(event);// qDebug() enterEvent: cnt;this-setText(QString(enterEvent: %1).arg(cnt));
}void LabelX::leaveEvent(QEvent *event) {Q_UNUSED(event);// qDebug() leaveEvent: cnt;this-setText(QString(leaveEvent: %1).arg(cnt));
}
2. 通过事件过滤器实现
给一个目标对象安装一个事件过滤器对象语法如下
monitoredObj-installEventFilter(filterObj);这样
所有发向monitoredObj的事件都会被filterObj截获/过滤截获/过滤的位置是filterObj的eventFilter()函数中eventFilter()函数返回一个bool类型返回true表示事件被截获不再发送给monitoredObj返回false 表示事件会接着传递给monitoredObj
2.1 添加一个QLabel
lbl new QLabel(this);2.2 为QLabel安装事件过滤器
// 为lbl标签安装事件过滤器
lbl-installEventFilter(this);2.3 重写eventFilter 函数
static int cnt 1;
// 安装事件过滤器
bool EnterLeaveWidget::eventFilter(QObject *obj, QEvent *event) {if (obj lbl) {// 判断事件的类型if (event-type() QEvent::Enter) {lbl-setText(QString(enterEvent: %1).arg(cnt));} else if (event-type() QEvent::Leave) {lbl-setText(QString(leaveEvent: %1).arg(cnt));}}// 其他事件交给父类处理return QWidget::eventFilter(obj, event);
}