當前位置:網站首頁>QDialog、QWidget、QMainWindow的區別
QDialog、QWidget、QMainWindow的區別
2022-01-27 05:38:12 【科技燈塔】
QDialog、QWidget、QMainWindow的區別
-
dialog有exec函數,如果是dialog窗口,後邊的窗口是不可選的;
-
widget和dialog都有show函數,如果通過這個函數顯示這兩種類型的窗口,則兩個窗口都是可選的;
-
widget主要是在上面放置布局和控件;
-
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
邊欄推薦
猜你喜歡
隨機推薦
- uniapp上傳圖片及組件傳值
- 瑞利年金險資金保障安全嗎?收益高不高啊?
- 華為手機USB連不上電腦的解决方法
- Flutter 2,移動金融應用開發
- 關於st25系列NFC標簽簡單介紹及st25TV系列用於門禁讀取時的注意事項總結
- 關於用ffmpeg轉手機視頻發現視頻長寬倒了的問題
- 函數 / 類模板--模板2
- 數組中的第k個最大的元素--優先級隊列、排序、堆、排序
- 單片機實例27——ADC0809A/D轉換器基本應用技術(硬件電路圖+匯編程序+C語言程序)
- Collection集合的學習
- 一場面試結束,某度員工從事Android 5年為何還是初級工程師?
- 3本書閱讀筆記【人月神話-Go語言實戰-研發能力持續成長路線】01
- PHP垃圾回收機制
- 【電子技術】什麼是LFSR?
- 死鎖?如何定比特到死鎖?如何修複死鎖?(jps和jstack兩個工具)
- 快樂寒假 22/01/20
- image
- 噴程序員?SURE?
- LDO分壓電阻計算小工具
- 面試之求一串字符串中每個字符的出現次數
- 【ISO15765_UDS&OBD診斷】-01-概述
- 【Mysql上分之路】第九篇:Mysql存儲引擎
- RHCE 第一次作業
- 2021.10.16我的第一篇博客:一切皆有可能!
- CTA-敏感行為-讀取IMEI
- 面試被問怎麼排查平時遇到的系統CPU飆高和頻繁GC,該怎麼回答?
- nuxt項目總結-綜合
- 自然語言處理學習筆記(一)
- C語言第一課
- 各比特大佬,Spark的重點難點系列暫時更新完畢
- 基於 esbuild 的 universal bundler 設計
- XCTFre逆向(四):insanity
- 理解什麼是真正的並發數
- JVM腦圖
- 【Pytorch(四)】學習如何使用 PyTorch 讀取並處理數據集
- 函數棧幀的創建與銷毀
- 構建神經網絡- 手寫字體識別案例
- 多模態生成模型ERNIE-VILG
- kotlin不容忽視的小細節
- 備戰一年,終於斬獲騰訊T3,我堅信成功是可以複制的