天天看點

QWidget、QMainWindow、QDialog差別

1、繼承關系: 

QWidget、QMainWindow、QDialog差別

2、說明:

QWidget類是所有使用者界面對象的基類。視窗部件(QWidget)是使用者界面的一個基本單元:它從視窗系統接收滑鼠、鍵盤和其它事件,并且在螢幕上繪制自己。每一個視窗部件都是矩形的,并且它們按Z軸順序排列。一個視窗部件可以被它的父視窗部件或者它前面的視窗部件蓋住一部分。 

QMainWindow 類提供一個有菜單條、錨接視窗(例如工具條)和一個狀态條的主應用程式視窗。主視窗通常用在提供一個大的中央視窗部件(例如文本編輯或者繪制畫布)以及周圍菜單、工具條和一個狀态條。QMainWindow常常被繼承,因為這使得封裝中央部件、菜單和工具條以及視窗狀态條變得更容易,當使用者點選菜單項或者工具條按鈕時,槽會被調用。基于主視窗的程式,預設已經有了自己的布局管理器。

QDialog類是對話框視窗的基類。對話框視窗是主要用于短期任務以及和使用者進行簡要通訊的頂級視窗。QDialog可以是模态對話框也可以是非模态對話框。QDialog支援擴充性并且可以提供傳回值。它們可以有預設按鈕。QDialog也可以有一個QSizeGrip在它的右下角,使用setSizeGripEnabled()。 

注意QDialog使用父視窗部件的方法和Qt中其它類稍微不同。對話框總是頂級視窗部件,但是如果它有一個父對象,它的預設位置就是父對象的中間。它也将和父對象共享工具條條目。

QDialog 是最普通的頂級視窗(一個不會被嵌入到父視窗部件的視窗部件叫做頂級視窗部件)。通常情況下,頂級視窗部件是有架構和标題欄的視窗(盡管使用了一定的視窗部件标記,建立頂級視窗部件時也可能沒有這些裝飾。)在Qt中,QMainWindow和不同的QDialog的子類是最普通的頂級視窗。

非頂級視窗部件是子視窗部件。它們是它們的父視窗部件中的子視窗。你通常不能在視覺角度從它們的父視窗部件中辨識一個子視窗部件。在Qt中的絕大多數其它視窗部件僅僅作為子視窗部件才是有用的。(當然把一個按鈕作為或者叫做頂級視窗部件也是可能的,但絕大多數人喜歡把他們的按鈕放到其它按鈕當中,比如QDialog。)

如果是頂級對話框,那就基于QDialog建立,如果是主窗體,那就基于QMainWindow,如果不确定,或者有可能作為頂級窗體,或有可能嵌入到其他窗體中,則基于QWidget建立。

       當然了,實際中,你還可以基于任何其他部件類來派生。看實際需求了,比如QFrame、QStackedWidget等等。

摘自:

http://www.kuqin.com/qtdocument/qwidget.html#details

http://www.kuqin.com/qtdocument/qmainwindow.html#details

http://www.kuqin.com/qtdocument/qdialog.html