综述
QT定义鼠标事件可以在protected中直接自写鼠标的相关事件。但是,在QTextedit中却无法生效。
例如:
在widget.h下:
protected:
void mousePressEvent(QMouseEvent *event); //单击
void mouseReleaseEvent(QMouseEvent *event); //释放
void mouseDoubleClickEvent(QMouseEvent *event); //双击
void mouseMoveEvent(QMouseEvent *event); //移动
void wheelEvent(QWheelEvent *event);
然后在
widget.cpp
void Widget::mousePressEvent(QMouseEvent *event)
{
// 如果是鼠标左键按下 改变指针形状,并且存储当前指针位置与窗口位置的差值。
if(event->button() == Qt::LeftButton){
···
}
// 如果是鼠标右键按下
else if(event->button() == Qt::RightButton){
···
}
}
......//以及剩下的操作
方法
可以使用时间过滤器的方式进行处理(这个方法就像开挂一样,很万能的!):
首先是头文件:
widget.h
private slots:
bool eventFilter(QObject *obj, QEvent *e);
然后:
widget.cpp
bool Widget::eventFilter(QObject* o, QEvent* e)
{
Q_UNUSED(o);
if(e->type() == QEvent::MouseButtonPress){
QMouseEvent* pMe = static_cast<QMouseEvent*>(e);
//这里不进行任何操作即代表使该手势失效
qDebug() << pMe->pos();
return true;
}
if(e->type()==QEvent::MouseButtonDblClick){
QMouseEvent* pMe = static_cast<QMouseEvent*>(e);
qDebug() << pMe->pos();
//这里不进行任何操作即代表使该手势失效
return true;
}
return false;
}
此外还需要在其初始化的时候进行注册:
this->myTextEdit->viewport()-> installEventFilter(this);