說明:setWindowFlags函數就是設置窗口屬性,本博客主要分析此函數的參數
本博客轉載CSDN博主「hjhomw」的原創文章。
原文鏈接:https://blog.csdn.net/hejun_haitao/java/article/details/50815695
主要是記錄一下項目中遇到的問題。
主要使用的是WindowsType枚舉 enum WindowType { Widget = 0x00000000, Window = 0x00000001, Dialog = 0x00000002 | Window, Sheet = 0x00000004 | Window, Drawer = 0x00000006 | Window, Popup = 0x00000008 | Window, Tool = 0x0000000a | Window, ToolTip = 0x0000000c | Window, SplashScreen = 0x0000000e | Window, Desktop = 0x00000010 | Window, SubWindow = 0x00000012, WindowType_Mask = 0x000000ff, MSWindowsFixedSizeDialogHint = 0x00000100, MSWindowsOwnDC = 0x00000200, X11BypassWindowManagerHint = 0x00000400, FramelessWindowHint = 0x00000800, WindowTitleHint = 0x00001000, WindowSystemMenuHint = 0x00002000, WindowMinimizeButtonHint = 0x00004000, WindowMaximizeButtonHint = 0x00008000, WindowMinMaxButtonsHint = WindowMinimizeButtonHint | WindowMaximizeButtonHint, WindowContextHelpButtonHint = 0x00010000, WindowShadeButtonHint = 0x00020000, WindowStaysOnTopHint = 0x00040000, // reserved for Qt3Support: // WMouseNoMask = 0x00080000, // WDestructiveClose = 0x00100000, // WStaticContents = 0x00200000, // WGroupLeader = 0x00400000, // WShowModal = 0x00800000, // WNoMousePropagation = 0x01000000, CustomizeWindowHint = 0x02000000, WindowStaysOnBottomHint = 0x04000000, WindowCloseButtonHint = 0x08000000, MacWindowToolBarButtonHint = 0x10000000, BypassGraphicsProxyWidget = 0x20000000, WindowOkButtonHint = 0x00080000, WindowCancelButtonHint = 0x00100000, WindowSoftkeysVisibleHint = 0x40000000, WindowSoftkeysRespondHint = 0x80000000 }
Qt::Widget: QWidget構造函數的默認值,如果新的窗口部件沒有父窗口部件,則它是一個獨立的窗口,否則就是一個子窗口部件
Qt::Window: 無論是否有父窗口部件,新窗口部件都是一個窗口,通常有一個窗口邊框和一個標題欄
Qt::Dialog: 新窗口部件是一個對話框,它是QDialog構造函數的默認值
Qt::Sheet: 新窗口部件是一個Macintosh表單(sheet)
Qt::Drawer: 新窗口部件是一個Macintosh抽屜(drawer)
Qt::Popup: 新窗口部件是一個彈出式頂層窗口
Qt::Tool: 新窗口部件是一個工具(tool)窗口,它通常是一個用於顯示工具按鈕的小窗口。如果一個工具窗口有父窗口部件,則它將顯示在父窗口的部件上面,否則相當於使用了Qt::WindowStaysOnTopHint提示。
Qt::ToolTip: 新窗口部件是一個提示窗口,沒有標題欄和窗口邊框
Qt::Desktop: 新窗口部件是桌面,它是QDesktopWidget構造函數的默認值
Qt::SplashScreen: 新窗口部件是一個歡迎窗口,它是SplashScreen構造函數的默認值。
Qt::SubWindow: 新窗口部件是一個子窗口,而無論窗口部件是否有父窗口部件。此外,Qt還定義了一些控制窗口外觀的窗口提示(這些窗口提示僅對頂層窗口有效)
Qt::MSWindowFiredSizeDialogHint: 為Windows系統上的窗口裝飾一個窄的對話框邊框,通常這個提示用於固定大小的對話框
Qt::MSWindowOwnDC: 為Windows系統上的窗口添加自身的顯示上下文菜單
Qt::X11BypassWindowManagerHint: 完全忽視窗口管理器,它的作用是產生一個根本不被管理的無窗口邊框的窗口(此時,用戶無法使用鍵盤進行輸入,除非手動調用QWidget::activateWindow()函數)
Qt::FramelessWindowHint: 產生一個無窗口邊框的窗口,此時用戶無法移動該窗口和改變它的大小
Qt::CustomizeWindowHint: 關閉默認的窗口標題提示
Qt::WindowTitleHint: 為窗口裝飾一個標題欄
Qt::WindowSystemMenuHint: 為窗口添加一個窗口系統系統菜單,並盡可能地添加一個關閉按鈕
Qt::WindowMinimizeButtonHint: 為窗口添加一個“最小化”按鈕
Qt::WindowMaximizeButtonHint: 為窗口添加一個“最大化”按鈕
Qt::WindowMinMaxButtonHint: 為窗口添加一個“最小化”按鈕 和一個“最大化”按鈕
Qt::WindowContextHelpButtonHint: 為窗口添加一個“上下文幫助”按鈕
Qt::WindowStaysOnTopHint: 告知窗口系統,該窗口應該停留在所有其他窗口的上面。
Qt::WindowType_Mask: 一個用於提示窗口標識的窗口類型部分的掩碼
注:藍色為主要使用的類型。
項目中的問題:繪制一個窗口顯示一個lineEdit,操作lineEdit內容,光標消失。
方法:添加Qt::Dialog(本窗口繼承QDialog類)
//設置窗口無邊框且窗口顯示在最頂層
this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);