QT-Qtextedit滑鼠事件
阿新 • • 發佈:2019-02-08
綜述
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);