Qt: QWidget、QMainWindow、QDialog和QFrame的區別

繼承關係:

在Qt中所有的類都有一個共同的基類QObject ,QWidget直接繼承與QPaintDevice類,QDialog、QMainWindow、QFrame直接繼承QWidget 類。

QWidget:

QWidget類是所有用戶界面對象的基類。窗口部件(QWidget)是用戶界面的一個基本單元:它從窗口系統接收鼠標,鍵盤和其他事件,並且在屏幕上繪製自己。每個窗口部件都是矩形的,並且它們按Z軸順時針排列。一個窗口部件可以把他的父窗口部件或者它前面的窗口部件蓋住一部分。

QMainWindow:

QMainWindow 類提供一個菜單條、錨接窗口(如工具欄)和一個狀態條的主應用程序窗口。主窗口通常用在提供一個大的中央窗口部件以及周圍菜單、工具條和一個狀態條。QMainWindow常常被繼承,因爲這使的封裝中央部件、菜單和工具以及窗口狀態條變得容易,當用戶點擊菜單項或工具條按鈕時,槽會被調用。基於主窗口的應用程序,默認已經有了自己的佈局管理器。

QDialog:

QDialog類是對話框窗口的基類。對話框窗口是主要用於短時期任務以及用戶進行簡要通訊的頂級窗口。QDialog可以是模態對話框也可以是非模態對話框。QDialog支持擴展性並且可以提供返回值。他們可以有默認按鈕。QDialog也可以有一個QSizeGrip在它的右下方,使用setSizeGripEnable()。
  注意:QDialog使用父窗口部件的方法和Qt中其他類不同。對話框總是頂級窗口部件,但是如果它有一個父對象,它的默認位置就是父對象的中間。他也將和父對象共享工具條條目。QDialog 是最普通的頂級窗口(一個不會被嵌入到父窗口部件的窗口部件叫頂級窗口部件)。通常情況下,頂級窗口部件是有框架和標題欄的窗口(儘管使用了一定的窗口部件標記,創建頂級窗口部件時也可以沒有這個修飾)在Qt中。QMainWindow和不同的QDialog的子類是最普通的頂級窗口。
  非頂級窗口部件就是子窗口部件。他們是他們的父窗口部件中的子窗口。你通常不能在視覺角度從它們的父窗口部件辨別一個子窗口部件。在Qt中的絕大多數其他窗口部件僅僅作爲子窗口部件纔是有用的。(當然把一個按鈕作爲或者叫做頂級窗口部件也是有可能的,但是絕大多數人喜歡把它們的按鈕放到其他部件當中)
  如果是頂級對話框,那就是基於QDialog創建,如果是主窗體,就基於QMainWindow,如果不確定,或有可能作爲頂級窗體,或有可能嵌入到其他窗體中,則基於QWidget創建。

QFrame:

QFrame類是有框架的窗口部件的基類。它繪製部件並且調用一個虛函數drawContents()函數來填充這個框架。這個函數是被子類重新實現的。QFrame類也可以之間創建沒有任何內容的簡單框架,儘管通常情況下,要用到QHBox 或QVBox,因爲它們可以自動佈置你放到框架的窗口部件。

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