1 Qt中的事件
1.1 鼠標事件
1.2 鼠標進入事件 enterEvent
1.3 鼠標離開事件 leaveEvent
1.4 鼠標按下 mousePressEvent ( QMouseEvent *ev)
1.5 鼠標釋放 mouseReleaseEvent
1.6 鼠標移動 mouseMoveEvent
1.7 ev->x() x座標 ev->y() y座標
1.8 ev->button() 可以判斷所有按鍵 Qt::LeftButton Qt::RightButton
1.9 ev->buttons()判斷組合按鍵 判斷move時候的左右鍵 結合 & 操作符
1.10 格式化字符串 QString( “ %1 %2 ” ).arg( 111 ).arg(222)
1.11 設置鼠標追蹤 setMouseTracking(true);
2 定時器1
2.1 利用事件 void timerEvent ( QTimerEvent * ev)
2.2 啓動定時器 startTimer( 1000) 毫秒單位
2.3 timerEvent 的返回值是定時器的唯一標示 可以和ev->timerId 做比較
3 定時器2
3.1 利用定時器類 QTimer
3.2 創建定時器對象 QTimer * timer = new QTimer(this)
3.3 啓動定時器 timer->start(毫秒)
3.4 每隔一定毫秒,發送信號 timeout ,進行監聽
3.5 暫停 timer->stop
4 event事件
4.1 用途:用於事件的分發
4.2 也可以做攔截操作,不建議
4.3 bool event( QEvent * e);
4.4 返回值 如果是true 代表用戶處理這個事件,不向下分發了
4.5 e->type() == 鼠標按下 …
bool myLabel::event(QEvent *e)
{
//如果是鼠標按下 在event事件分發中做攔截操作
if(e->type() == QEvent::MouseButtonPress)
{
QMouseEvent *ev = static_cast<QMouseEvent *>(e);
QString str = QString("Event函數中::鼠標按下了 x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
return true;
//return true代表用戶自己處理這個事件,不向下分發
}
//其他事件 交給父類處理 默認處理
return QLabel::event(e);
}
5 事件過濾器
5.1 在程序將事件分發到事件分發器前,可以利用過濾器做攔截
5.2 步驟
5.2.1 1、給控件安裝事件過濾器
5.2.2 2、重寫 eventFilter函數 (obj , ev)
//步驟1 給label1 安裝事件過濾器
ui->label->installEventFilter(this);
//步驟2 重寫 eventfilter事件
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->label)
{
if(event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *ev = static_cast<QMouseEvent *>(event);
QString str = QString("事件過濾器中::鼠標按下了 x=%1 y=%2 globalX=%3 globalY=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug()<<str;
return true;
}
//其他默認處理
return QWidget::eventFilter(watched,event);
}
}