當前位置:網站首頁>QDialog、QWidget、QMainWindow的區別

QDialog、QWidget、QMainWindow的區別

2022-01-27 05:38:12 科技燈塔

QDialog、QWidget、QMainWindow的區別

  1. dialog有exec函數,如果是dialog窗口,後邊的窗口是不可選的;

  2. widget和dialog都有show函數,如果通過這個函數顯示這兩種類型的窗口,則兩個窗口都是可選的;

  3. widget主要是在上面放置布局和控件;

  4. mainwindow可以顯示菜單,工具欄,狀態欄、托盤等功能。

注意:
1、查看幫助文檔可以發現,setMenuBar、addToolBar、setCentralWidget、setStatusBar幾種行為只有QMainWindow類具有。 因此,在繼承自QWidget類的用戶類中無法創建菜單欄等幾種行為。 這就是QMainWindow和QWidget的主要區別。
2、 QWidget繼承於QObject和QPaintDevice,QDialog和QMainWindow則繼承於QWidget,QDialog、QMainWindow兩者之間沒有直接關系。

QDialog

QDialog類是對話框窗口的基類。

對話框窗口是一個頂級窗體(不會被嵌入到父窗口部件的窗口部件),主要用於短期任務以及和用戶進行簡要通訊。QDialog支持擴展性並且可以提供返回值。它們可以有默認按鈕,也可以有一個QSizeGrip在它的右下角,使用setSizeGripEnabled()。通常情况下,頂級窗口部件是有框架和標題欄的窗口(可自定義)。

dialog窗口為了給人們提供更好的可視化操作,但是對於程序員而言,這個操作並不是立刻執行的;而是當在窗口選擇關閉後,才將選擇的結果返回給後臺,後臺才可以根據選擇的結果進行相應的操作。

注意:QDialog(以及其它使用Qt::Dialog類型的widget)使用父窗口部件的方法和Qt中其它類稍微不同。對話框總是頂級窗口部件,但是如果它有一個父對象,它的默認比特置就是父對象的中間。它也將和父對象共享工具條條目。

QWidget

QWidget類是所有用戶界面對象的基類。

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

QWidget有很多成員函數,但是它們中的一些有少量的直接功能:例如,QWidget有字體屬性,但是自己從來不用。為很多繼承它的子類提供了實際的功能,比如QLabel、QPushButton、QCheckBox等等。

QMainWindow

QMainWindow類提供一個有菜單欄、工具欄、狀態欄的主應用程序窗口(例如:Qt Creator等)。

主窗口通常用在提供一個大的中央窗口部件(例如文本編輯或者繪制畫布)以及周圍 菜單、工具條和一個狀態條。QMainWindow常常被繼承,因為這使得封裝中央部件、菜單和工具條以及窗口狀態條變得更容易,當用戶點擊菜單項或者工具條按鈕時,槽會被調用。

QMainWindow擁有自己的布局,我們可以使用QMenuBar(菜單欄)、QToolBar(工具欄)、QStatusBar(狀態欄)以及QDockWidget(懸浮窗體),布局有一個可由任何種類小窗口所占據的中心區域。

窗體選擇技巧

如果是頂級對話框,則基於QDialog創建。

如果是主窗體,則基於QMainWindow創建。

如果不確定、前兩種情况都有,或者需要嵌入到其他窗體中,則基於QWidget創建。

自定義mianWidget和Widget窗體的區別

1、mianWidget和Widget 不同,mianWidegt在創建界面時需要繪制中心界面setCentralWidget(mainWIdget);

2、mainWIdget->setLayout(qHBoxLayout); 只能插入布局

簡單實例如下:

QHBoxLayout *qHBoxLayout = new QHBoxLayout();
qHBoxLayout->setMargin(0);
QPushButton *QQBtu = new QPushButton("ssssss");
qHBoxLayout->addWidget(QQBtu);
QWidget *mainWIdget = new QWidget();

//項目主布局

QHBoxLayout *mainLayout =new QHBoxLayout();
mainWIdget->setLayout(qHBoxLayout);

setCentralWidget(mainWIdget);

版權聲明
本文為[科技燈塔]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201270538116261.html

隨機推薦