色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > UI到底是怎么接受事件的事件

UI到底是怎么接受事件的事件 時間:2018-09-27      來源:未知

UI到底是怎么接受事件的事件

本文中主要講述QT中關于時間機制的一些看法:

事件的產生過程:

1 首先由底層的硬件中斷 à 操作系統(產生一個事件在其自己的事件隊列中)

2 Qt中有一個 a.exec() 會幫我們建立一個事件循環 該循環一直在等在系統有事件傳入

下列是一些示例代碼:

While(不為空隊列)

{

If(是退出事件?)

{

該APP退出;

}

If(分配事件到事件的函數;)

{執行函數};

}

具體的說,a.exec()會啟動 event loop 實際上是啟動的的是QEventLoop相關的函數:

Qt's main event loop (QCoreApplication::exec()) fetches native window system events from the event queue, translates them into QEvents, and sends the translated events to QObjects.

Qt中的事件處理函數:

1 bool event(QEvent* ev);

該函數是Qt中所有事件進來后執行的第一個函數;

在源碼中 該函數的實現過程大致為:

bool event(QEvent* ev)

{

swtich(ev->type())

{

Case QEvent::MouseButtonPress: mousePressEvent(ev);break;

Case QEvent::KeyPress: keyPressEvent(ev);break;

}

}

2 特定的事件處理函數:

void mousePressEvent(QMouseEvent *event);//鼠標點擊

void keyPressEvent(QKeyEvent *event);//鍵盤點擊

void wheelEvent(QWheelEvent *event);//鼠標滾輪

(PS:我們如何查詢 特定事件呢?

比如說我們現在是繼承的QWidget 那么我們在man手冊中查 QWidget,并在其中 搜索 event關鍵字)

3 事件過濾處理器(意義:讓事件發生后 在執行默認的事件處理函數的時候,也會執行我們所寫的事件處理函數。我們把這個事件處理函數叫事件過濾處理器)

步驟:

a 書寫事件過濾處理器

bool eventFilter(QObject *obj, QEvent *event);

//param1 obj :事件的執行者 param2:事件的類型

b 安裝 à 誰想用我們事件過濾處理器,那么誰安裝

(PS: 事件過濾處理器的返回值是bool通常情況下 有事件處理的話返回true沒有的話 返回false。在后 我們還是要調取一下父類的事件過濾器

return 父類::eventFilter(obj, event);)

4事件過濾處理器的特殊使用

給QApplication安裝事件過濾處理器(有什么好處呢?當事件傳入到本APP的時候 ,不單單會執行傳統的事件處理函數,還會執行我們的事件過濾處理器<全部的事件,全部的控件>)

5 notify()函數 (了解qApp->notify(ui->textEdit,keyevent);的用法)

While(processEvent())

{

If(是退出事件?)

{

該APP退出;

}

If(notify())

{event()};

}

事件的發出:

事件的發出大概分兩種情況:

1 硬件產生的(硬件在操作)

2 軟件產生的(模擬硬件操作)

我們現在研究一下 如何軟件產生事件:

a. post方法 post方法會直接將事件發送到 event loop //異步的

QKeyEvent *keyevent = new QKeyEvent(QEvent::KeyPress, Qt::Key_A + i,Qt::NoModifier);

//postEvent 發送事件 param1:發出者 param2:發出的事件

QCoreApplication::postEvent(this,keyevent);

b. send方法send方法會直接將事件發送的具體的個體 //同步的

QKeyEvent *keyevent = new QKeyEvent(QEvent::KeyPress, Qt::Key_A + i,Qt::NoModifier);

//sendEvent 發送事件 param1:發送到誰 param2:發送的事件 //同步的

// QCoreApplication::sendEvent(ui->textEdit,keyevent);

(PS:我們也可以使用qApp->notify(ui->textEdit,keyevent); 來達到 send的效果)

(PS:對于事件的傳遞:

總體規則 :一個在某一個控件上發生的事件,那么它肯定會執行它的事件處理函數,如果該事件處理函數中對event進行了 accept 那么該事件不在向父控件傳遞;如果該事件處理函數中對event進行了 ignore 那么該事件繼續向父控件傳遞;

默認情況下 ,我們是對event進行了 accept;

上一篇:時間選擇器,選擇日期DatePicker

下一篇:Serializable的簡單認識

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 国产午夜鲁丝片AV无码免费 | 亚洲精品无AMM毛片 gg在线精品视频 | 四虎影视久久久免费观看 | 伊人春色视频 | 温柔少妇的高潮呻吟 | 亚洲精品成a人在线观看☆ 国产AV国片偷人妻麻豆郑州公司 | 日韩视频在线观看不卡 | 少妇办公室好紧好爽再浪一点 | 孕妇奶水仑乱A级毛片在线播放 | 蜜桃视频在线免费播放 | 久久人妻无码一区二区三区AV | 四川少妇BBB凸凸凸BBB按摩 | 乳尖乱颤娇喘连连A片在线观看 | 亚洲精品高清国产一线久久 | 野花WWW成人免费视频 | 欧美色婷| 国产熟人AV一二三区 | 找老女人泻火对白自拍 | 精品无码AV无码专区 | 亚洲r成人av久久人人爽 | 五月丁香六月婷综合缴情在线 | 日本无码一区二区三区在线 | 国精产品一品二品国精在线观看 | 亚洲精品中文幕一区二区 | 一区二区视频日韩免费 | 一二三四在线观看免费高清视频 | 三年片在线观看免费大全动漫 | 老头天天吃我奶躁我的视频 | 国产免费丝袜调教视频 | 99国产精品人妻噜啊噜 | 用舌头去添高潮无码视频 | 日韩人妻中文无码一区二区 | 男人搡女人搡到高潮视频 | 麻豆人妻少妇精品无码专区 | 日韩免费卡一卡二新区 | 人妻丝袜无码专区视频网站 | 中文字幕av无码无卡免费 | 亚洲成年人 | 成人免费网站高清观看素材在线 | 欧美日韩久久久久久 | 久久综合九色欧美综合狠狠 |