QT中setWindowFlags和 setAttribute使用詳解及注意問題

1. setWindowFlags(QT::WindowFlags)主要設置一些窗口標誌,平常開發中主要有兩類需求:

  •  1.1    將某一子窗口設置爲最頂層窗口。
  •            使用Qt::Tool 屬性:setWindowFlags(Qt::Tool) 
  •  1.2    重新定義窗口的屬性,比如:取掉最大、最小、關閉等按鈕,或者直接使用無邊框窗口

                 注意:很多人可能使用1.2中設置屬性,但是總是不成功,其原因是如果子窗口有父親,則窗口屬性也被父親控制,這時候的這個子窗口其實並不是嚴格意義上的完整窗口,相當於父窗口的一個部件,所以這時候設置自定義窗口屬性,有兩種方法:(1)設置父親窗口屬性,(2)給子窗口設置屬性的時候加上 Qt::Window 或 Qt::Dialog等指定該子窗口爲完整窗口,(Qt::DIalog | Qt::CustomizeWindowHint )

        以下是窗口具體屬性介紹:

  • Qt::Widget : QWidget構造函數的默認值,如新的窗口部件沒有父窗口部件,則它是一個獨立的窗口,否則就是一個子窗口部件。
  • Qt::Window : 無論是否有父窗口部件,新窗口部件都是一個窗口,通常有一個窗口邊框和一個標題欄。
  • Qt::Dialog : 新窗口部件是一個對話框,指示部件是應該作爲對話框窗口(即標題欄中通常沒有最大化或最小化按鈕)。這是QDialog的默認類型。如果要將其用作模態對話框,則應從另一個窗口啓動它,或者如果有父窗口,則與QWidget::windowModality屬性一起使用。如果將其設置爲模態,則對話框將阻止應用程序中的其他頂級窗口獲取任何輸入。我們將具有父級的頂級窗口稱爲輔助窗口。
  • Qt::Sheet : 新窗口部件是一個Macintosh表單。
  • Qt::Drawer : 新窗口部件是一個Macintosh抽屜。
  • Qt::Popup : 新窗口部件是一個彈出式頂層窗口。
  • Qt::Tool : 新窗口部件是一個工具窗口,它通常是一個用於顯示工具按鈕的小窗 
    口,如果一個工具窗口有父窗口部件,則它將顯示在父窗口部件的上面,否則,將相當於使用了Qt::WindowStaysOnTopHint展示。
  • Qt::Tooltip : 新窗口部件是一個提示窗口,沒有標題欄和窗口邊框.
  • Qt::SplashScreen : 新窗口部件是一個歡迎窗口,它是QSplashScreen構造函數的默認值。
  • Qt::Desktop : 新窗口部件是桌面,它是QDesktopWidget構造函數的默認值。
  • Qt::SubWindow : 新窗口部件是一個子窗口,而無論該窗口部件是否有父窗口部件。
  • Qt::X11BypassWindowManagerHint : 完全忽視窗口管理器,它的作用是產生一個根本不被管理器的無窗口邊框的窗口,此時,用戶無法使用鍵盤進行輸入,除非手動調用QWidget::ActivateWindow()函數。
  • Qt::FramelessWindowHint : 產生一個無窗口邊框的窗口,此時用戶無法移動該窗口和改變它的大小。
  • Qt::CustomizeWindowHint : 關閉默認的窗口標題提示。

        this->setWindowModality(Qt::WindowModal); //設置窗體爲模態

2.  setAttribute(Qt::WA_DeleteOnClose,true)用於設置各種窗口小部件(widget)的屬性,平時開發一般兩種需求:

  •  1.1    關閉窗口時刪掉實例化的類
  •            使用Qt::WA_DeleteOnClose 屬性:setAttribute(Qt::WA_DeleteOnClose,true) 
  •  1.2    QT中窗口部件背景透明化
  •            Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:

                  注意:窗口透明還有很多方法,以下列舉幾個

1.  Qt::WA_DeleteOnClose
      一個QWidget在close()時,對象並沒有被刪除,可以設置this->setAttribute(Qt::WA_DeleteOnClose,true);使此對象被
      若下次再調用show()就會段錯誤。不過這種方法有個弊端:因爲這個指針是沒有辦法自動設爲NULL,會變爲野指針。

2.  Qt::WA_QuitOnClose屬性:表示當擁有該屬性的最後一個部件接受到QCloseEvent事件時,讓Qt終止應用程序。默認情況           下,所有Qt::Window類型的部件都具有該屬性。

3.  Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:
     setAutoFillBackground(false);  //這個不設置的話就背景變黑  
     setWindowFlags(Qt::FramelessWindowHint);  
     setAttribute(Qt::WA_TranslucentBackground,true); 表示窗口小部件應具有半透明背景,即窗口小部件的任何非不透明區域將       是半透明的(因爲窗口小部件將具有Alpha通道。)設置此標誌會導致設置WA_NoSystemBackground。在Windows上,窗口       小部件還需要設置Qt :: FramelessWindowHint窗口標誌。該標誌由小部件的作者設置或清除。

以下爲其他幾種屬性
Qt::WA_PaintOutsidePaintEvent
一般QPainter只能在PaintEvent事件中使用,使用此flag可以使在paintEvent 之外的函數中使用。
Qt::WA_AcceptDrops    允許將拖放操作中的數據拖放到窗口小部件上(請參閱QWidget :: setAcceptDrops())。
Qt::WA_AlwaysShowToolTips    爲非活動窗口啓用工具提示。
Qt::WA_DeleteOnClose    當窗口小部件接受close事件時,Qt刪除此窗口小部件(請參閱QWidget :: closeEvent())。
Qt::WA_Disabled    表示窗口小部件已禁用,即它不接收任何鼠標或鍵盤事件。還有一個getter函數QWidget :: isEnabled()。這由Qt內核設置/清除。
Qt::WA_DontShowOnScreen    表示窗口小部件已隱藏或不是可查看桌面的一部分。
Qt::WA_MouseTracking    表示窗口小部件已啓用鼠標跟蹤。請參閱QWidget :: mouseTracking。
Qt::WA_NoMouseReplay    用於彈出窗口小部件(popup)。指示彈出窗口小部件關閉時不應重播最近的鼠標按下事件。該標誌由小部件的作者設置,並在每次小部件接收到新的鼠標事件時由Qt內核清除。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章