qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
一、QMouseEvent的詳細(xì)描述
首先請(qǐng)注意,Qt中的QMouseEvent一般只涉及鼠標(biāo)左鍵或右鍵的單擊、釋放等操作,而對(duì)鼠標(biāo)滾輪的響應(yīng)則通過QWheeEvent來處理。
QMouseEvent類包含了用于描述鼠標(biāo)事件的參數(shù)。
當(dāng)在一個(gè)窗口里按住鼠標(biāo)按鍵、或移動(dòng)、或釋放就會(huì)產(chǎn)生鼠標(biāo)事件QMouseEvent。
鼠標(biāo)移動(dòng)事件只會(huì)在按下鼠標(biāo)按鍵的情況下才會(huì)發(fā)生,除非通過顯式調(diào)用QWidget::setMouseTracking()函數(shù)來開啟鼠標(biāo)軌跡,這種情況下只要鼠標(biāo)指針在移動(dòng),就會(huì)產(chǎn)生一系列的QT鼠標(biāo)事件;
在一個(gè)窗口中,當(dāng)鼠標(biāo)按鍵被按下時(shí),QT會(huì)自動(dòng)捕捉鼠標(biāo)軌跡,鼠標(biāo)指針?biāo)诘母复翱跁?huì)繼續(xù)接受鼠標(biāo)事件,直到最后一個(gè)鼠標(biāo)按鍵被釋放。
二、QMouseEvent的傳遞
一個(gè)鼠標(biāo)事件包含一些指定的接受標(biāo)志flag用于指出該事件是否會(huì)被接收和處理 ,如果鼠標(biāo)指針?biāo)诘母复翱诓唤邮赵撌录t可以調(diào)用函數(shù)ignore()予以忽略;
多個(gè)重疊的窗口在實(shí)現(xiàn)里好比一個(gè)遞歸的倒立樹,鼠標(biāo)事件會(huì)沿著鼠標(biāo)指針?biāo)诘母复翱诘逆湵硐蛏蟼鬟f,直到某個(gè)窗口調(diào)用accept()函數(shù)進(jìn)行事件處理,否則該事件將被過濾銷毀掉;
如果一個(gè)鼠標(biāo)事件傳遞給鼠標(biāo)指針?biāo)诘拇翱?#xff0c;而該窗口的QT::WA_NoMousePropagation位置為TRUE,則該事件不會(huì)通過父窗口繼續(xù)向上傳遞。
可以通過函數(shù)pos()、x()、y()得知鼠標(biāo)事件發(fā)生時(shí)鼠標(biāo)指針相對(duì)于窗口的位置。
如果把移動(dòng)窗口作為一次鼠標(biāo)事件,可以通過函數(shù)globalPos()返回的全局坐標(biāo)值避免窗口的抖動(dòng)。
可以使用QWidget::setEndabled()來開啟/關(guān)閉對(duì)應(yīng)的窗口是否接受鍵盤和鼠標(biāo)事件。
需要對(duì)鼠標(biāo)事件進(jìn)行處理時(shí),通常要重新實(shí)現(xiàn)以下幾個(gè)鼠標(biāo)事件處理函數(shù):
QWidget::mousePressEvent()
QWidget::mouseReleaseEvent()
QWidget::mouseDoubleClickEvent()
QWidget::mouseMoveEvent()
三、鼠標(biāo)事件
鼠標(biāo)事件使用的時(shí)候,加頭文件
#include
1.鼠標(biāo)按下事件
void Widget::mousePressEvent(QMouseEvent *event)
{//如果是鼠標(biāo)左鍵按下
if(event->button() ==Qt::LeftButton)
{
···
}//如果是鼠標(biāo)右鍵按下
else if(event->button() ==Qt::RightButton)
{
···
}
}
2.鼠標(biāo)移動(dòng)事件 默認(rèn)情況下,觸發(fā)事件需要點(diǎn)擊一下,才能觸發(fā)。可設(shè)置為自動(dòng)觸發(fā):setMouseTracking(true);
void Widget::mouseMoveEvent(QMouseEvent *event)
{//這里必須使用buttons()
if(event->buttons() & Qt::LeftButton) //進(jìn)行的按位與
{
···
}
}
3.鼠標(biāo)釋放事件
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
···
}
4.鼠標(biāo)雙擊事件
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{//如果是鼠標(biāo)左鍵按下
if(event->button() ==Qt::LeftButton){
···
}
}
5.滾輪事件
void Widget::wheelEvent(QWheelEvent *event)
{if(event->delta() > 0)//當(dāng)滾輪遠(yuǎn)離使用者時(shí)
{
···
}else//當(dāng)滾輪向使用者方向旋轉(zhuǎn)時(shí)
{
···
}
}
四、鍵盤事件
鍵盤事件使用時(shí),加頭文件
#include
1.鍵盤按下事件
void Widget::keyPressEvent(QKeyEvent *event)
{//是否按下Ctrl鍵 特殊按鍵
if(event->modifiers() ==Qt::ControlModifier)
{//是否按下M鍵 普通按鍵 類似
if(event->key() ==Qt::Key_M)
···
}elseQWidget::keyPressEvent(event); //保存默認(rèn)事件//如果是處理兩個(gè)普通按鍵,得避免自動(dòng)重復(fù),釋放中也要處理
if(event->key() ==Qt::Key_Up)
{//按鍵重復(fù)時(shí)不做處理
if(event->isAutoRepeat()) return;//標(biāo)記向上方向鍵已經(jīng)按下
keyUp = true;
}else if(event->key() ==Qt::Key_Left)
{if(event->isAutoRepeat()) return;
keyLeft= true;
}
}
2.按鍵釋放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
···//如果是處理兩個(gè)普通按鍵,得避免自動(dòng)重復(fù)
if(event->key() ==Qt::Key_Up)
{if(event->isAutoRepeat()) return;
···
}else if(event->key() ==Qt::Key_Left)
{if(event->isAutoRepeat()) return;
···
}
}
五、常用公有成員函數(shù)
1.globalPos()、globalX()、globalY()這三個(gè)函數(shù)返回的是鼠標(biāo)指針的全局坐標(biāo)。
const?QPoint?& QMouseEvent::globalPos ()?const
返回鼠標(biāo)指針的全局坐標(biāo)值,對(duì)于異步窗口系統(tǒng)例如X11這是一個(gè)很重要的特性,無論何時(shí)移動(dòng)窗口作為對(duì)鼠標(biāo)事件的響應(yīng)時(shí),globalPos()返回的當(dāng)前鼠標(biāo)指針坐標(biāo)值和QCursor::pos()的返回值是有區(qū)別的,可以通過調(diào)用QWidget::mapToGlobal(pos())在窗口坐標(biāo)和全局坐標(biāo)系之間進(jìn)行轉(zhuǎn)換。
int QMouseEvent::globalX ()?const
返回鼠標(biāo)事件發(fā)生時(shí)鼠標(biāo)指針全局坐標(biāo)的X值,相當(dāng)于globalPos.x();
int QMouseEvent::globalY ()?const返回鼠標(biāo)事件發(fā)生時(shí)鼠標(biāo)指針全局坐標(biāo)的Y值,相當(dāng)于globalPos.y()。
2.pos()、posF()、x()、y()這四個(gè)函數(shù)返回的是鼠標(biāo)指針在當(dāng)前接收鼠標(biāo)事件的窗口中的位置。
const QPoint & QMouseEvent::pos () const
返回鼠標(biāo)指針和接受該鼠標(biāo)事件窗口的相對(duì)位置,其中的坐標(biāo)值為整型;
QPointF QMouseEvent::posF () const
返回鼠標(biāo)指針在接受該鼠標(biāo)事件窗口的相對(duì)位置,該坐標(biāo)值用float類型表示可以增加精確度;
int QMouseEvent::x () const
返回鼠標(biāo)事件發(fā)生時(shí),鼠標(biāo)指針在當(dāng)前接收鼠標(biāo)事件的窗口中位置的x坐標(biāo)值,相當(dāng)與pos().x();
int QMouseEvent::y () const
返回鼠標(biāo)事件發(fā)生時(shí),鼠標(biāo)指針在當(dāng)前接收鼠標(biāo)事件的窗口中位置的y坐標(biāo)值,相當(dāng)于pos().y()。
總結(jié)
以上是生活随笔為你收集整理的qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 喜伤心怒伤肝
- 下一篇: linux uboot nfs启动,ub