国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > UI到底是怎么接受事件的事件

UI到底是怎么接受事件的事件 時(shí)間:2018-09-27      來(lái)源:未知

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

本文中主要講述QT中關(guān)于時(shí)間機(jī)制的一些看法:

事件的產(chǎn)生過(guò)程:

1 首先由底層的硬件中斷 à 操作系統(tǒng)(產(chǎn)生一個(gè)事件在其自己的事件隊(duì)列中)

2 Qt中有一個(gè) a.exec() 會(huì)幫我們建立一個(gè)事件循環(huán) 該循環(huán)一直在等在系統(tǒng)有事件傳入

下列是一些示例代碼:

While(不為空隊(duì)列)

{

If(是退出事件?)

{

該APP退出;

}

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

{執(zhí)行函數(shù)};

}

具體的說(shuō),a.exec()會(huì)啟動(dòng) event loop 實(shí)際上是啟動(dòng)的的是QEventLoop相關(guān)的函數(shù):

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中的事件處理函數(shù):

1 bool event(QEvent* ev);

該函數(shù)是Qt中所有事件進(jìn)來(lái)后執(zhí)行的第一個(gè)函數(shù);

在源碼中 該函數(shù)的實(shí)現(xiàn)過(guò)程大致為:

bool event(QEvent* ev)

{

swtich(ev->type())

{

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

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

}

}

2 特定的事件處理函數(shù):

void mousePressEvent(QMouseEvent *event);//鼠標(biāo)點(diǎn)擊

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

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

(PS:我們?nèi)绾尾樵?特定事件呢?

比如說(shuō)我們現(xiàn)在是繼承的QWidget 那么我們?cè)趍an手冊(cè)中查 QWidget,并在其中 搜索 event關(guān)鍵字)

3 事件過(guò)濾處理器(意義:讓事件發(fā)生后 在執(zhí)行默認(rèn)的事件處理函數(shù)的時(shí)候,也會(huì)執(zhí)行我們所寫的事件處理函數(shù)。我們把這個(gè)事件處理函數(shù)叫事件過(guò)濾處理器)

步驟:

a 書寫事件過(guò)濾處理器

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

//param1 obj :事件的執(zhí)行者 param2:事件的類型

b 安裝 à 誰(shuí)想用我們事件過(guò)濾處理器,那么誰(shuí)安裝

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

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

4事件過(guò)濾處理器的特殊使用

給QApplication安裝事件過(guò)濾處理器(有什么好處呢?當(dāng)事件傳入到本APP的時(shí)候 ,不單單會(huì)執(zhí)行傳統(tǒng)的事件處理函數(shù),還會(huì)執(zhí)行我們的事件過(guò)濾處理器<全部的事件,全部的控件>)

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

While(processEvent())

{

If(是退出事件?)

{

該APP退出;

}

If(notify())

{event()};

}

事件的發(fā)出:

事件的發(fā)出大概分兩種情況:

1 硬件產(chǎn)生的(硬件在操作)

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

我們現(xiàn)在研究一下 如何軟件產(chǎn)生事件:

a. post方法 post方法會(huì)直接將事件發(fā)送到 event loop //異步的

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

//postEvent 發(fā)送事件 param1:發(fā)出者 param2:發(fā)出的事件

QCoreApplication::postEvent(this,keyevent);

b. send方法send方法會(huì)直接將事件發(fā)送的具體的個(gè)體 //同步的

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

//sendEvent 發(fā)送事件 param1:發(fā)送到誰(shuí) param2:發(fā)送的事件 //同步的

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

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

(PS:對(duì)于事件的傳遞:

總體規(guī)則 :一個(gè)在某一個(gè)控件上發(fā)生的事件,那么它肯定會(huì)執(zhí)行它的事件處理函數(shù),如果該事件處理函數(shù)中對(duì)event進(jìn)行了 accept 那么該事件不在向父控件傳遞;如果該事件處理函數(shù)中對(duì)event進(jìn)行了 ignore 那么該事件繼續(xù)向父控件傳遞;

默認(rèn)情況下 ,我們是對(duì)event進(jìn)行了 accept;

上一篇:時(shí)間選擇器,選擇日期DatePicker

下一篇:Serializable的簡(jiǎn)單認(rèn)識(shí)

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部