Qt::FocusPolicy的使用

想在qt中實現的效果:
        一個QWidget窗口中間,有多個子窗口,選中每個窗口,每個窗口邊框變色,代表選中該子窗口。
如下效果,點擊某個子窗口:
Qt::FocusPolicy的使用 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 
前提:介紹一下Qt的聚焦策略 
enum Qt::FocusPolicy
This enum type defines the various policies a widget can have with respect to acquiring keyboard focus.

Constant Value Description
Qt::TabFocus 0x1  接受Tab鍵焦點
Qt::ClickFocus 0x2 接受鼠標單擊做焦點
Qt::StrongFocus TabFocus | ClickFocus | 0x8 接受Tab鍵和鼠標單擊做焦點
Qt::WheelFocus StrongFocus | 0x4  滑輪作爲焦點選中事件
Qt::NoFocus 0 不接受焦點

1、首先要設置窗口/控件的聚焦策略
通過designer設置
Qt::FocusPolicy的使用 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅

 或者通過代碼設置:
plotWidget_1->setFocusPolicy(Qt::StrongFocus);

2、在qss代碼中設置:

  1. /*widget正常狀態*/  
  2. QWidget#widget_1{  
  3.     border:3px solid #CFCFCF;  
  4. }  
  5. /*widge處於焦點狀態*/  
  6. QWidget#widget_1:focus{  
  7.     border:5px solid #A5A6A1;  
  8. }  

 

3、如果要想選中窗口中子控件,窗口就被聚焦的話。
比如選中widget中的button等控件,然後widget就被聚焦。
可以將button等控件設置成tabFocus或者noFocus狀態。

Qt::FocusPolicy的使用 - 柳北風兒 - 柳北風兒~~~~~~~欲宇仙炅
 
 4、一些函數介紹
//當前widget下一個孩子焦點
bool focusNextChild()
//當前widget上一個孩子焦點
bool focusPreviousChild()
//焦點來的事件
virtual void focusInEvent(QFocusEvent * event)
//焦點離開的事件
virtual void focusOutEvent(QFocusEvent * event)


轉載自:http://blog.163.com/qimo601@126/blog/static/158220932014563012137/

發佈了2 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章