QWidget,QMainWindow和QDialog的區別(轉)


轉自 (http://blog.csdn.net/ikahn/article/details/6706284)

 

在創建Qt Gui Application時,總會讓你選擇在QWidget,QMainWindow和QDialog中選擇一個Base Class。

這三個類具體有什么區別呢?在Qt的手冊和網上找了一些資料。

先看官方的手冊:

QWidget Class Reference
The QWidget class is the base class of all user interface objects. 
Inherits: QObject and QPaintDevice.
Inherited by: ……, QDialog, ……,QMainWindow, ……

QDialog Class Reference
The QDialog class is the base class of dialog windows.
InheritsQWidget.

QMainWindow Class Reference
The QMainWindow class provides a main application window.
InheritsQWidget.

可以看到QMainWindow和QDialog都是繼承自QWidget。再看看下面那段從網上轉過來的介紹,大概就能了解三者之間的區別了。

 

QWidget類:

是所有用戶界面對象的基類。 窗口部件是用戶界面的一個原子:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己的表現。每一個窗口部件都是矩形,並且它們按Z軸順序排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。

 

QMainWindow 類:

提供一個有菜單條、錨接窗口(例如工具條)和一個狀態條的主應用程序窗口。主窗口通常用在提供一個大的中央窗口部件(例如文本編輯或者繪制畫布)以及周圍菜單、工具條和一個狀態條。QMainWindow常常被繼承,因為這使得封裝中央部件、菜單和工具條以及窗口狀態變得更容易。繼承使創建當用戶點擊菜單項或者工具條按鈕時被調用的槽成為可能。你也可以使用Qt設計器來創建主窗口。

 

QDialog類:

是對話框窗口的基類。對話框窗口是主要用於短期任務以及和用戶進行簡要通訊的頂級窗口。QDialog可以是模式的也可以是非模式的。QDialog支持擴展性並且可以提供返回值。它們可以有默認按鈕。QDialog也可以有一個QSizeGrip在它的右下角,使用setSizeGripEnabled()。

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

 

下面很重要:

1、如果是頂級對話框,那就基於QDialog創建;

2、如果是主窗體,那就基於QMainWindow,如果不確定,或者有可能作為頂級窗體,或有可能嵌入到其他窗體中,則基於QWidget創建。當然了,實際中,你還可以基於任何其他部件類來派生。看實際需求了,比如QFrame、QStackedWidget等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM