1. 程式人生 > >【Qt】Qt之Tab鍵切換焦點順序【轉】

【Qt】Qt之Tab鍵切換焦點順序【轉】

簡介

Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。

焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。

習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如:使用者註冊時,個人資訊輸入框焦點的切換、執行按鈕焦點的切換等。

效果

這裡寫圖片描述

實現方式

介面說明:

static void QWidget::setTabOrder(QWidget * first, QWidget * second)

Puts the second widget after the first widget in the focus order.

也就是說,按下Tan鍵後,焦點會從第一個控制元件切換到第二個控制元件。

注意,如果第二個控制元件Tab順序改變,則應該這樣設定一個順序鏈:

//設定a、b、c、d順序
setTabOrder(a, b);  //a->b
setTabOrder(b, c);  //a->b->c
setTabOrder(c, d);  //a->b->c->d

而不是這樣:

//錯誤
setTabOrder(c, d);  // c->d
setTabOrder(a, b);  // a->b 和 c->d
setTabOrder(b, c);  // a->b->c, 但不是c->d

原始碼

這裡以三個按鈕如三個輸入框為例,來說明Tab的順序。

設定獲取焦點時的樣式,以便我們更清楚的觀看效果。

QPushButton *pButton1 = new QPushButton(this);
QPushButton *pButton2 = new QPushButton(this);
QPushButton *pButton3 = new QPushButton(this);

QLineEdit *pLineEdit1 = new QLineEdit(this);
QLineEdit *pLineEdit2 = new QLineEdit(this);
QLineEdit *
pLineEdit3 = new QLineEdit(this); pButton1->setText("1"); pButton2->setText("3"); pButton3->setText("5"); pLineEdit1->setText("6"); pLineEdit2->setText("4"); pLineEdit3->setText("2"); pButton1->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}"); pButton2->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}"); pButton3->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}"); pLineEdit1->setStyleSheet("QLineEdit:focus{border:2px solid green;}"); pLineEdit2->setStyleSheet("QLineEdit:focus{border:2px solid green;}"); pLineEdit3->setStyleSheet("QLineEdit:focus{border:2px solid green;}"); QWidget::setTabOrder(pButton1, pLineEdit3); QWidget::setTabOrder(pLineEdit3, pButton2); QWidget::setTabOrder(pButton2, pLineEdit2); QWidget::setTabOrder(pLineEdit2, pButton3); QWidget::setTabOrder(pButton3, pLineEdit1);

就這樣,簡簡單單的一個介面解決了我們的問題。有興趣的小夥伴可以看下focusNextChild

相關推薦

QtQtTab切換焦點順序

簡介 Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。 焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。 習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如:使用者註冊時,個人資訊輸入框焦點的切換、執行

QtTab切換焦點順序

void Widget::setorder() { QWidget::setTabOrder(ui->pcComboBox, ui->switcherComboBox); QWidget::setTabOrder(ui->switcherComboBox, u

Qt Tab 切換焦點順序

簡介 Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。 焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。 習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如:

在介面上用回車鍵代替tab切換焦點的辦法

現在資源視圖裡面,把對話方塊上所有需要切換焦點的視窗或者按鈕的tabstop屬性設定為TRUE。 為視窗對映PreTranslateMessage訊息處理函式 新增以下程式碼: if((pMsg-&

Selenium2selenium 定位以及切換frame(iframe)

js xml imp int webdriver 寫法 pre avr ray -a 參考:http://blog.csdn.net/huilan_same/article/details/52200586 總有人看不明白,以防萬一,先在開頭大寫加粗說明一下: fra

VS2017怎麼調整Tab順序和回車直接登入

有時候使用筆記本沒有滑鼠的時候,大家都會使用Tab鍵去選擇文字框去輸入自己的使用者名稱密碼,這就產生了一個需求,如何修改Tab鍵的順序呢? 怎麼調整Tab鍵的順序 第一步:點選檢視 第二步:點選如上圖的Tab鍵順序 此時用滑鼠第一次點選的控制元件就是Tab鍵第一次按

unity 按tab切換下一個inputfild

body oge false selected bool and right down unit using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; publi

leetcode 66題 6 從尾到頭列印連結串列

這道題是一道基本的連結串列操作題目。 使用python構建的連結串列是利用前插法構建的,即由最開始的一個節點A(next指向None),插入一個新的節點B,head就指向這個新的節點,然後這個新的節點B的next指向A。以此類推。 題目描述 輸入一個連結串列,按連結串列值從尾到頭的順序返回一

vue大師晉級路第二集:深入瞭解元件第3章——自定義事件

事件名 不同於元件和 prop,事件名不存在任何自動化的大小寫轉換。而是觸發的事件名需要完全匹配監聽這個事件所用的名稱。舉個例子,如果觸發一個 camelCase 名字的事件: this.$emit('myEvent') 則監聽這個名字的 kebab-case

vue大師晉級路第二集:深入瞭解元件第4章——插槽

插槽內容 Vue 實現了一套內容分發的 API,這套 API 基於當前的 Web Components 規範草案,將 < slot> 元素作為承載分發內容的出口。 它允許你像這樣合成元件: <navigation-link url="/prof

vue大師晉級路第二集:深入瞭解元件第5章——動態元件 & 非同步元件

在動態元件上使用 keep-alive 我們之前曾經在一個多標籤的介面中使用 is 特性來切換不同的元件: <component v-bind:is="currentTabComponent"></component> 當在這些元件之間

vuetab標籤切換功能(一)

專案開發中,使用vue實現tab頁籤切換功能。具體例項如下:(1)首先定義子元件,如下圖:以select01.vue為例,子元件的原始碼如下:<template>    <div slot='select01'>{{msg}}</div> 

不改動duilib原始碼的情況下,實現tab切換登入介面EDIT控制元件功能

 由於duilib是開源無專人管理的介面庫,導致網上流傳了各式各樣的版本。今天某某修復了這個bug上傳一版,明天某某修復另一個bug上傳別的版本,太過雜亂。而且之所以寫這篇文章,是因為公司用的duilib庫,存在EDIT控制元件對table鍵支援的bug。即焦點混亂。花了近一

iOS二維碼快速開啟相機讀取二維碼

上一篇文章寫了怎麼生成二維碼,這兒就說說怎麼讀取吧,反正也很簡單,iOS封裝的太強大了 步驟呢就是這樣: 讀取二維碼需要匯入AVFoundation框架#import <AVFoundation/AVFoundation.h> 1:利用攝像頭識別二維碼中的

MFC 更換 按tab 切換順序

當我們做好介面以後,比如登入介面,輸完帳號以後,習慣性的按tab鍵,切換到密碼輸入。但有時候你按tab鍵,預設不是跳到密碼輸入。這下需要自己更改按TAB鍵,切換控制元件的順序。   操作方法:在介面狀態按"ctrl+D",在控制元件上會出現數字,單擊上面的數字即可改變切換順

WinForm中變EnterTab實現焦點轉移的方法

+= end prev mar select 窗口 detail com ota if (e.KeyCode == Keys.Enter) { //this.SelectNextControl

enter切換焦點,input獲得焦點後placeholder消失

需求:充分考慮使用者體驗,輸入使用者名稱和密碼時,不用按Tab鍵,而是按enter鍵就可以進行上下切換。並且為了其美觀性,在input獲得焦點時,placeholder會消失。 描述:通常在做input來提交使用者名稱和密碼時,會用placeholder來提示

QtQt密碼框不可選中、複製、貼上、無右選單等

簡述 在做使用者登入、修改密碼的時候,往往會用到密碼框,其中一些功能要求與普通的輸入框不同,例如:不能選中、複製、貼上、無右鍵選單等功能,當然設定密碼不可見是必須的! 下面介紹兩種方式來實現相同的效果。 簡述 效果 基礎部分 事件過濾器 介面說明 實現方式 事件重

QtQDialog遮蔽Esc

簡述 Qt中Esc鍵會在一些控制元件中預設的進行一些事件的觸發,比如:QDialog,按下Esc鍵視窗消失。大多數情況下,我們不需要這麼做,那麼就需要對預設事件進行遮蔽。 簡述 原始碼分析 事件過濾器 事件重寫 原始碼分析 通過檢視QDialog的原始碼,我們很容易會發現

Qt入門實踐Qt哲學家問題(linux 多線程)

avi .cpp private 1=1 endif debug 問題 tel pub 轉載請註明出處:http://blog.csdn.net/feng1790291543 linux多線程實現哲學家問題,依據哲學家吃飯、拿筷子、放下筷子...... 首先,主