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內核清除。