wordpress主題推薦深圳seo網(wǎng)站推廣方案
淺談QT中Tab鍵的切換邏輯
無(wú)意中發(fā)現(xiàn)在輸入界面中按下Tab鍵時(shí),沒有按照預(yù)想的順序切換焦點(diǎn)事件,如下圖所示
這個(gè)現(xiàn)象還是很有趣,仔細(xì)觀察了下,默認(rèn)的切換順序是按照控件拖入順序,那么知道了這個(gè)問題想要解決起來就很簡(jiǎn)單了,完全可以通過順序擺放控件就可以實(shí)現(xiàn)按照指定的順序切換。
但是此方法又略顯低級(jí),是否還有其他解決方法?倒騰后發(fā)現(xiàn),添加上布局后,原來無(wú)序的切換就變得有序了
- 表格布局
效果
- 水平布局
效果
- 垂直布局
效果
如果加上label和按鈕或者其他可以編輯的控件,會(huì)是什么效果有興趣的可以試試,這里就不在演示了。
在Qt早版本中,5.11之前,可能不能通過布局解決Tab鍵的切換順序,或者說界面布局已經(jīng)完成了,這時(shí)候該怎么設(shè)置焦點(diǎn)的切換順序。
在官方文檔中有一個(gè)函數(shù)可以設(shè)置焦點(diǎn)的切換順序setTabOrder
,官方解釋如下。
[static] void QWidget::setTabOrder(QWidget *first, QWidget *second)
Puts the second widget after the first widget in the focus order.
It effectively removes the second widget from its focus chain and inserts it after the first widget.
Note that since the tab order of the second widget is changed, you should order a chain like this:
/*
按焦點(diǎn)順序?qū)⒌诙€(gè)小部件放在第一個(gè)小部件之后。
它有效地從焦點(diǎn)鏈中刪除第二個(gè)小部件,并將其插入到第一個(gè)小部件之后。
注意,由于第二個(gè)小部件的選項(xiàng)卡順序發(fā)生了變化,您應(yīng)該像這樣訂購(gòu)一個(gè)鏈:
*/setTabOrder(a, b); // a to bsetTabOrder(b, c); // a to b to csetTabOrder(c, d); // a to b to c to d
not like this:// WRONGsetTabOrder(c, d); // c to dsetTabOrder(a, b); // a to b AND c to dsetTabOrder(b, c); // a to b to c, but not c to d