成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

QT核心編程之鍵盤焦點(diǎn) (5)

移動(dòng)開發(fā)
Qt的窗口部件在圖形用戶界面中按用戶的習(xí)慣的方式來(lái)處理鍵盤焦點(diǎn),一個(gè)焦點(diǎn)移出事件會(huì)被發(fā)送給焦點(diǎn)窗口部件(如果有的話)告訴它關(guān)于失去焦點(diǎn)的事情。然后一個(gè)焦點(diǎn)進(jìn)入事件被發(fā)送給這個(gè)窗口部件告訴它剛剛接收到焦點(diǎn)。

QT核心編程之鍵盤焦點(diǎn)是本節(jié)介紹的內(nèi)容,QT核心編程我們要分幾個(gè)部分來(lái)介紹,想?yún)⒖几鄡?nèi)容,請(qǐng)看末尾的編輯推薦進(jìn)行詳細(xì)閱讀,先來(lái)看本篇內(nèi)容。

Qt的窗口部件在圖形用戶界面中按用戶的習(xí)慣的方式來(lái)處理鍵盤焦點(diǎn)。基本出發(fā)點(diǎn)是用戶的擊鍵能定向到屏幕上窗口中的任何一個(gè),和在窗口中任何一個(gè)部件中。當(dāng)用戶按下一個(gè)鍵,他們期望鍵盤焦點(diǎn)能夠到達(dá)正確的位置,并且軟件必須盡量滿足這種希望。系統(tǒng)必須確定擊鍵定位在哪一個(gè)應(yīng)用程序、應(yīng)用程序中的哪一個(gè)窗口和窗口中的哪一個(gè)窗口部件。

1、焦點(diǎn)移動(dòng)的方式

把焦點(diǎn)定位特殊的窗口部件的習(xí)慣方式有:

(1)用戶按下Tab鍵(或者Shift鍵+Tab鍵)(或者有時(shí)是Enter鍵)。

(2)用戶點(diǎn)擊一個(gè)窗口部件。

(3)用戶按下一個(gè)鍵盤快捷鍵。

(4)用戶使用鼠標(biāo)滾輪。

(5)用戶移動(dòng)焦點(diǎn)到一個(gè)窗口,并且應(yīng)用程序必須決定窗口中的哪個(gè)窗口部件應(yīng)該得到焦點(diǎn)

這些移動(dòng)機(jī)制的每個(gè)都是不同的,并且不同類型的窗口部件只能接收它們中的一些方式的焦點(diǎn)。下面我們將按次序介紹它們。

(1)Tab或者Shift+Tab.

按Tab鍵是到目前為止用鍵盤移動(dòng)焦點(diǎn)的最通用的方法。有時(shí)在輸入數(shù)據(jù)的應(yīng)用程序中Enter鍵和Tab鍵的作用是一樣的。我們暫時(shí)忽略這一點(diǎn)。

所有窗口系統(tǒng)中的有關(guān)焦點(diǎn)的最通用使用方法是:按Tab鍵移動(dòng)鍵盤焦點(diǎn)到每個(gè)窗口的窗口部件循環(huán)列表中的下一個(gè)窗口部件。Tab鍵按照循環(huán)列表的一個(gè)方向移動(dòng)焦點(diǎn),Shift鍵+Tab鍵按另一個(gè)方向移動(dòng)焦點(diǎn)。按Tab鍵從一個(gè)窗口部件到下一個(gè)窗口部件移動(dòng)焦點(diǎn)的次序叫做Tab鍵次序。

在Qt中,窗口部件循環(huán)列表存放在QFocusData類中。每個(gè)窗口有一個(gè)QFocusData對(duì)象,并且當(dāng)選擇合適的 QWidget::FocusPolicy焦點(diǎn)策略的QWidget::setFocusPolicy()被調(diào)用的時(shí)候,窗口部件自動(dòng)把它們自己追加到列表的末尾。你可以使用QWidget::setTabOrder()來(lái)自定義Tab鍵控制次序。如果你沒(méi)有定義這個(gè)次序,那么Tab鍵會(huì)按照窗口部件構(gòu)造的順序移動(dòng)焦點(diǎn)。Qt designer工具提供了一個(gè)可視化的改變Tab鍵控制次序的方法。

因?yàn)榘碩ab鍵是如此的常用,大多數(shù)含有焦點(diǎn)的窗口部件應(yīng)該支持Tab焦點(diǎn)。主要例外情況是幾乎沒(méi)用到的窗口部件,并且在窗口部件上有一些移動(dòng)焦點(diǎn)的鍵盤快捷鍵或者錯(cuò)誤處理。

(2)用戶點(diǎn)擊一個(gè)窗口部件。

在使用鼠標(biāo)或者其它指針設(shè)備的計(jì)算機(jī)中,用鼠標(biāo)點(diǎn)擊一個(gè)窗口部件是一種比按Tab鍵更常用的方法。

當(dāng)鼠標(biāo)點(diǎn)擊把焦點(diǎn)移到一個(gè)窗口部件時(shí),對(duì)于編輯器窗口部件,它也會(huì)移動(dòng)文本光標(biāo)(窗口部件的內(nèi)部焦點(diǎn))到鼠標(biāo)被點(diǎn)擊的地點(diǎn)。

鼠標(biāo)點(diǎn)擊移動(dòng)焦點(diǎn)是大多數(shù)窗口部件必須支持的,有時(shí)窗口部件需要避免鼠標(biāo)點(diǎn)擊移動(dòng)焦點(diǎn)。例如:在一個(gè)字處理程序中,當(dāng)用戶點(diǎn)擊"B"(粗體)工具按鈕,鍵盤焦點(diǎn)應(yīng)該保留在原來(lái)的位置。在Qt中,只有QWidget::setFocusPolicy()函數(shù)影響點(diǎn)擊焦點(diǎn)。

(3)用戶按下一個(gè)鍵盤快捷鍵。

使用鍵盤快捷鍵來(lái)移動(dòng)焦點(diǎn)不是很常用。這種情況可能會(huì)隱含地發(fā)生在打開的模式對(duì)話框中,但是也會(huì)顯式地發(fā)生在使用焦點(diǎn)加速器中,例如在QLabel::setBuddy()、QGroupBox和QTabBar提供的加速器中。

用戶想讓焦點(diǎn)跳到的窗口部件都應(yīng)支持快捷鍵焦點(diǎn)。例如:一個(gè)Tab對(duì)話框?yàn)樗拿恳粋€(gè)頁(yè)提供鍵盤快捷鍵,所以用戶可以按下比如Alt+P來(lái)跳到打印頁(yè)面。但只能有少量的快捷鍵,并且為命令提供鍵盤快捷鍵也很重要,如:在標(biāo)準(zhǔn)快捷鍵列表中,Alt+P也可以用來(lái)粘貼、播放或打印。

(4)用戶使用鼠標(biāo)滾輪。

在Microsoft Windows上,鼠標(biāo)滾輪的用法是一直由有鍵盤焦點(diǎn)的窗口部件處理。在Mac OS X和X11上,它由獲得其它鼠標(biāo)事件的窗口部件處理。

Qt處理這種平臺(tái)差異的方法是當(dāng)滾輪被使用時(shí),讓窗口部件移動(dòng)鍵盤焦點(diǎn)。每個(gè)窗口部件上有合適的焦點(diǎn)策略,應(yīng)用程序可以在Windows、Mac OS X和X11上按照習(xí)慣正確地處理焦點(diǎn)。

(5)用戶移動(dòng)焦點(diǎn)到這個(gè)窗口。

在這種情況下,應(yīng)用程序必須決定窗口中的哪一個(gè)窗口部件接收焦點(diǎn)。Qt自動(dòng)實(shí)現(xiàn)這樣的做法:如果焦點(diǎn)以前在這個(gè)窗口中,那么窗口中有焦點(diǎn)的***一個(gè)窗口部件應(yīng)該重新獲得焦點(diǎn)。如果以前焦點(diǎn)就從來(lái)沒(méi)有來(lái)到過(guò)這個(gè)窗口,并且你知道焦點(diǎn)應(yīng)該從哪里開始,就在你調(diào)用QWidget::show()顯示它之前,在應(yīng)該接收焦點(diǎn)的窗口部件上調(diào)用QWidget::setFocus()。如果你不知道,Qt會(huì)選擇一個(gè)合適的窗口部件。

2、焦點(diǎn)策略及操作函數(shù)

鍵盤焦點(diǎn)的策略及操作函數(shù)說(shuō)明如下:

(1)焦點(diǎn)策略屬性變量

focusPolicy 焦點(diǎn)策略屬性變量保存的是窗口部件接收鍵盤焦點(diǎn)的策略。如果窗口部件通過(guò)tab來(lái)接收鍵盤焦點(diǎn),這個(gè)策略就是QWidget::TabFocus;如果窗口部件通過(guò)點(diǎn)擊來(lái)接收鍵盤焦點(diǎn),這個(gè)策略就是QWidget::ClickFocus;如果窗口部件上述兩種方式都使用,是 QWidget::StrongFocus;并且如果它不接收焦點(diǎn)(QWidget的默認(rèn)值),是QWidget::NoFocus。

如果一個(gè)窗口部件處理鍵盤事件,你必須使鍵盤焦點(diǎn)生效。這通常在窗口部件的構(gòu)造函數(shù)中完成。例如,QLineEdit的構(gòu)造函數(shù)調(diào)用setFocusPolicy(QWidget::StrongFocus)。

(2)void QWidget::setFocus() [虛槽]

函數(shù)setFocus()把鍵盤輸入焦點(diǎn)賦給這個(gè)窗口部件(或者它的焦點(diǎn)代理)。

首先,一個(gè)焦點(diǎn)移出事件會(huì)被發(fā)送給焦點(diǎn)窗口部件(如果有的話)告訴它關(guān)于失去焦點(diǎn)的事情。然后一個(gè)焦點(diǎn)進(jìn)入事件被發(fā)送給這個(gè)窗口部件告訴它剛剛接收到焦點(diǎn)。(如果焦點(diǎn)移出和進(jìn)入的窗口部件是同一個(gè)的話,就什么都沒(méi)有發(fā)生。)

函數(shù)setFocus()會(huì)把焦點(diǎn)給一個(gè)窗口部件,而不管它的焦點(diǎn)策略,但是不會(huì)清空任何鍵盤捕獲(grabKeyboard())。請(qǐng)注意如果窗口部件是被隱藏的,它將不接收焦點(diǎn)

(3)void QWidget::setFocusProxy(QWidget * w) [虛]

函數(shù)setFocusProxy設(shè)置這個(gè)窗口部件的焦點(diǎn)代理為窗口部件w。如果w為0,這個(gè)函數(shù)重置這個(gè)窗口部件沒(méi)有焦點(diǎn)代理。

一些窗口部件,比如QComboBox,能夠"擁有焦點(diǎn)",但創(chuàng)建一個(gè)子窗口部件來(lái)實(shí)際處理這個(gè)焦點(diǎn)。例如,QComboBox創(chuàng)建了一個(gè)QLineEdit來(lái)處理焦點(diǎn)。

當(dāng)"這個(gè)窗口部件"獲得焦點(diǎn)時(shí),setFocusProxy()設(shè)置的這個(gè)窗口部件實(shí)際獲得焦點(diǎn)。如果有了一個(gè)焦點(diǎn)代理,focusPolicy()、setFocusPolicy()、setFocus()和hasFocus()都在這個(gè)焦點(diǎn)代理上操作。

小結(jié):QT核心編程之鍵盤焦點(diǎn)的內(nèi)容介紹完了,希望本文對(duì)你有所幫助,如果需要參考更多的內(nèi)容,請(qǐng)看編輯推薦。

【編輯推薦】

QT核心編程之Qt模板庫(kù)(1)

QT核心編程之集合類 (2)

QT核心編程之Qt線程 (3)

QT核心編程之鼠標(biāo)拖放 (4)

QT核心編程之會(huì)話管理 (6)

QT核心編程之調(diào)試技術(shù) (7)

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-22 10:12:08

Qt 線程

2011-06-22 09:40:32

QT 模板庫(kù) 模板

2011-06-22 10:45:21

QT 調(diào)試

2011-06-22 10:20:11

QT 鼠標(biāo) 拖放

2011-06-22 09:58:04

QT 集合類

2011-06-22 10:39:56

QT 會(huì)話管理

2011-06-30 13:49:00

Qt 鍵盤 聚焦

2011-06-17 15:06:14

Qt

2011-12-23 10:17:25

Android音樂(lè)編程管理音頻焦點(diǎn)

2011-06-29 18:09:57

Qt 矩陣鍵盤

2012-10-29 13:25:54

JavaScriptJSjQuery

2015-04-24 09:48:59

TCPsocketsocket編程

2011-06-29 15:14:22

Qt Embedded 鍵盤

2011-06-29 15:36:21

Qt Embedded 鍵盤

2017-02-07 18:34:16

Linux編程PING

2022-02-14 15:07:48

進(jìn)程FileChanne線程

2011-07-21 10:17:53

java

2011-06-10 12:44:09

2011-06-13 16:51:19

Qt Socket

2011-06-24 15:30:22

QT 皮膚 QSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩在线观看视频一区 | 亚洲国产精品99久久久久久久久 | 美日韩精品 | 亚洲精品一区二区冲田杏梨 | 日韩中文一区二区三区 | 国产成人免费在线 | 97精品国产一区二区三区 | 999精品视频 | 久久久资源| 欧美成人专区 | 久久中文视频 | 亚洲成人www | 国产成人在线一区 | 成年女人免费v片 | 日本精品一区二区三区在线观看 | 伊人中文字幕 | 日韩精品免费看 | 午夜精品久久久久久久星辰影院 | 怡红院免费的全部视频 | 日韩电影免费在线观看中文字幕 | 日韩精品在线观看一区二区三区 | 日韩日韩日韩日韩日韩日韩日韩 | 国产91久久精品一区二区 | 国产精品毛片av | 黄色大片免费看 | 中文天堂在线观看 | 久久久久久av | 瑟瑟免费视频 | 在线国产一区二区 | 欧美日韩视频在线 | 久久综合影院 | 不卡的av在线 | 日本一区二区在线视频 | 日韩在线不卡视频 | 欧美激情一区二区三区 | 欧美成人a | 久久精品一区 | 久久69精品久久久久久久电影好 | 一区二区三区四区日韩 | 在线第一页 | 国产精品日产欧美久久久久 |