1. 程式人生 > >QT-Qtextedit滑鼠事件

QT-Qtextedit滑鼠事件

綜述

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);