QDialog::QDialog ( QWidget * parent = 0, const char * name = 0, bool modal = FALSE, WFlags f = 0 )
構造一個父物件為parent、名稱為name的對話方塊。
1、如果modal為假(預設),這個對話方塊是非強制回應並且應該使用show()來被顯示。
2、如果modal為真,這個對話方塊使用exec()來被顯示,則它是模式的,也就是說會阻塞這個應用程式中其它視窗的輸入。
3、如果modal為真並且使用show()來被顯示,則它是半模式的。 視窗組件f將被傳遞給QWidget的建構函式。
如果,例如,我們不想要對話方塊的標題列中“這是什麼”按鈕,在f中傳遞WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu。
我們建議你傳遞一個非空的父物件。
請參考QWidget::setWFlags()和Qt::WidgetFlags。
Qt::WidgetFlags
這個枚舉類型是用來指定視窗組件的視窗系統屬性的。它們通常情況下沒用,但是在一些場合是必需的。這些標記中的一些依賴於視窗管理器是否支援它們。
主要類型有
Qt::WType_TopLevel - 表明這個視窗組件是頂級的,通常有一個視窗系統架構和其它的。
Qt::WType_Dialog - 表明這個視窗組件是頂級的,並且應該被修飾為一個對話方塊(比如,作為特色,在標題列中沒有最大化和最小化按鈕)。如果你想使用它作為一個強制回應對話方塊,它應該從另一個視窗中被運行,或者有一個父視窗並且這個標記必須和WShowModal一起使用。如果你使用了強制回應對話方塊,這個對話方塊將會防止應用程式的其它最上層視窗獲得任何輸入。WType_Dialog隱含了WType_TopLevel。我們指的是作為一個二級視窗作為最上層視窗需要有父視窗。(請參考WGroupLeader。)
Qt::WType_Popup - 表明這個視窗組件是一個彈出式的最上層視窗組件,比如它是模式的,但是供快顯功能表使用的視窗系統架構。WType_Popup隱含了WType_TopLevel。
Qt::WType_Desktop - 表明這個視窗組件是著明。請參考下面的WPaintDesktop。WType_Desktop隱含了WType_TopLevel。
這裡還有大量的標記可以用來自訂最上層視窗的外觀。這些對於其它視窗沒有任何效果的:
Qt::WStyle_Customize - 表明WStyle_*標記應該被用來替換預設標記來構建視窗。
Qt::WStyle_NormalBorder - 給視窗一個普通邊界。這個不能和WStyle_DialogBorder或WStyle_NoBorder一起使用。
Qt::WStyle_DialogBorder - 給視窗一個窄的對話方塊邊界。這個不能和WStyle_NormalBorder或WStyle_NoBorder。
Qt::WStyle_NoBorder - 產生一個沒有邊界的視窗。注意:使用者不可以通過視窗系統來移動或者重新定義無邊界視窗的大小。這個標記不可以和WStyle_NormalBorder或WStyle_DialogBorder一起使用。在Windows中,這個標記正常工作。在X11中,這個標記的結果取決於視窗管理器和它們對於MOTIF和/或NETWM提示的理解的能力:現在存在的現代視窗管理器中的絕大部分都可以處理這些。通過WX11BypassWM,你可以完全地繞過視窗管理器。這樣的結果就是無邊界視窗根本無法被管理了(比如,除非你手工地調用setActiveWindow()就無法獲得鍵盤輸入)。
Qt::WStyle_NoBorderEx - 這個值是廢棄的。它的效果和使用WStyle_NoBorder是一樣的。
Qt::WStyle_Title - 給視窗一個標題列。
Qt::WStyle_SysMenu - 添加一個視窗系統功能表。
Qt::WStyle_Minimize - 添加一個最小化按鈕。注意:在Windows下,為了使它能夠正常工作,它必須和WStyle_SysMenu一起組合使用。
Qt::WStyle_Maximize - 添加一個最大化按鈕。注意:在Windows下,為了使它能夠正常工作,它必須和WStyle_SysMenu一起組合使用。
Qt::WStyle_MinMax - 和WStyle_Minimize|WStyle_Maximize是一樣的。注意:在Windows下,為了使它能夠正常工作,它必須和WStyle_SysMenu一起組合使用。
Qt::WStyle_ContextHelp - 添加一個上下文協助按鈕到對話方塊上。
Qt::WStyle_Tool - 使這個視窗變為一個工具視窗。一個工具視窗經常是一個比含有正常標題列和休息的視窗更小的視窗,很典型的用於工具按鈕的集合。如果它有一個父視窗,工具視窗將總被放在它的上面。如果它沒有父視窗,你需要考慮同時傳遞一個WStyle_StaysOnTop。如果視窗系統支援它,一個工具視窗將會被使用更亮的架構來修飾。它也可以和WStyle_NoBorder一起組合使用。
Qt::WStyle_StaysOnTop - 通知視窗系統這個視窗應該放在所有其它視窗的上面。
Qt::WStyle_Dialog - 表明這個視窗是它的父視窗(比如,一個對話方塊)的邏輯子視窗。這個視窗將沒有自己的工作列條目並且通過視窗系統它將被保持在它的父視窗上面。通常當它的父視窗最小化時,它也最小化。如果沒有自訂,這個視窗將會被一個稍微簡單一些的標題列修飾。這個標記被QDialog使用。
修飾標記:
Qt::WDestructiveClose - 當視窗組件已經接收到closeEvent(),或者當視窗組件試圖忽略closeEvent()但不能的時候,使Qt刪除這個視窗組件。
Qt::WPaintDesktop - 把案頭的繪製事件給這個視窗組件。
Qt::WPaintUnclipped - 使在這個視窗組件上的所有的繪製操作都不能被省略。在它前面的這個視窗組件的子視窗組件或者其它視窗組件不能把它上面的繪製地區省略掉。
Qt::WPaintClever - 表明Qt不應該試圖最佳化重繪這個視窗組件,但是相反,在視窗系統上直接傳遞重繪事件。(這樣往往會產生更多的事件和更小的重繪地區。)
Qt::WResizeNoErase - 表明重新定義視窗組件的大小不應該刪除它。這樣允許比較聰明的重繪來避免閃爍。
Qt::WMouseNoMask - 表明即使這個視窗組件有一個障板,它想獲得它的整個矩形地區內的滑鼠時間。
Qt::WStaticContents - 表明這個視窗組件的內容是向西北方向對齊的並且是靜態度。當重新定義大小的時候,這個視窗組件將只接收它自己之內的新的可見的部分的繪製事件。
Qt::WRepaintNoErase - 表明這個視窗繪製所有的象素。更新、滾動和焦點改變都不會因此刪除這個視窗組件。這樣允許比較聰明的重繪來避免閃爍。
Qt::WGroupLeader - 使這個視窗為一個組領導。一個組領導不應該有父視窗(比如,它應該是一個最上層視窗)。組領導的任何子孫視窗(直接的或見解的)都在它這個組裡,其它視窗不在。如果你從一個組中顯示一個次要的視窗(比如,顯示一個最上端父視窗為組領導的視窗),對於組內其它視窗它是模式的,但對於組外的它是非強制回應。