在分享全部基礎知識以前,頗有必要在這裏介紹下經常使用的窗口-QWidget、QDialog、QMainWindow。程序員
熟悉Qt的同窗都應該知道,在新建Qt Widgets項目進行類信息選擇時會碰到它們,沒錯,很巧,每次都能碰到。因此,在之後的Qt開發中,咱們會常常和它們打交道。常言道,知己知彼,百戰不殆。只有瞭解它們、熟悉它們,才能更好地駕馭它們。。。markdown
QWidget繼承於QObject和QPaintDevice,QDialog和QMainWindow則繼承於QWidget,QDialog、QMainWindow二者之間沒有直接關係。淘氣的小盆友又不高興了,它倆分明同屬於一個父親,那就是兄弟姊妹關係O(∩_∩)O哈哈哈~。框架
QWidget類是全部用戶界面對象的基類。函數
窗口部件是用戶界面的一個原子:它從窗口系統接收鼠標、鍵盤和其它事件,而且將本身的表現形式繪製在屏幕上。每個窗口部件都是矩形,而且它們按Z軸順序排列。一個窗口部件能夠被它的父窗口部件或者它前面的窗口部件蓋住一部分。工具
QWidget有不少成員函數,可是它們中的一些有少許的直接功能:例如,QWidget有字體屬性,可是本身歷來不用。爲不少繼承它的子類提供了實際的功能,好比QLabel、QPushButton、QCheckBox等等。佈局
沒有父窗體的小部件始終是一個獨立的窗口(頂級窗口部件)。非窗口的小部件爲子部件,它們在父窗口中顯示。Qt中大多數部件主要被用做子部件。例如:能夠顯示一個按鈕做爲頂層窗口,但大多數人更喜歡將按鈕內置於其它部件,如QDialog。字體
上圖顯示了一個QGroupBox,裏面包含了大量由QGridLayout佈局的子控件。.net
QMainWindow類提供一個有菜單條、工具欄、狀態條的主應用程序窗口(例如:開發Qt經常使用的IDE-Visual Studio、Qt Creator等)。code
一個主窗口提供了構建應用程序的用戶界面框架。Qt擁有QMainWindow及其相關類來管理主窗口。對象
QMainWindow擁有本身的佈局,咱們可使用QMenuBar(菜單欄)、QToolBar(工具欄)、QStatusBar(狀態欄)以及QDockWidget(懸浮窗體),佈局有一個可由任何種類小窗口所佔據的中心區域。
例如:
QDialog類是對話框窗口的基類。
對話框窗口是一個頂級窗體,主要用於短時間任務以及和用戶進行簡要通信。QDialog能夠是模式的也能夠是非模式的。QDialog支持擴展性而且能夠提供返回值。它們能夠有默認按鈕。QDialog也能夠有一個QSizeGrip在它的右下角,使用setSizeGripEnabled()。
注意:QDialog(以及其它使用Qt::Dialog類型的widget)使用父窗口部件的方法和Qt中其它類稍微不一樣。對話框老是頂級窗口部件,可是若是它有一個父對象,它的默認位置就是父對象的中間。它也將和父對象共享工具條條目。
阻塞同一應用程序中其它可視窗口輸入的對話框。模式對話框有本身的事件循環,用戶必須完成這個對話框中的交互操做,而且關閉了它以後才能訪問應用程序中的其它任何窗口。模式對話框僅阻止訪問與對話相關聯的窗口,容許用戶繼續使用其它窗口中的應用程序。
顯示模態對話框最多見的方法是調用其exec()函數,當用戶關閉對話框,exec()將提供一個有用的返回值,而且這時流程控制繼續從調用exec()的地方進行。一般狀況下,要得到對話框關閉並返回相應的值,咱們鏈接默認按鈕,例如:」肯定」按鈕鏈接到accept()槽,」取消」按鈕鏈接到reject()槽。另外咱們也能夠鏈接done()槽,傳遞給它Accepted或Rejected。
和同一個程序中其它窗口操做無關的對話框。在文字處理中的查找和替換對話框一般是非模式的,容許用戶同時與應用程序的主窗口和對話框進行交互。調用show()來顯示非模式對話框,並當即將控制返回給調用者。
若是隱藏對話框後調用show()函數,對話框將顯示在其原始位置,這是由於窗口管理器決定的窗戶位置沒有明確由程序員指定,爲了保持被用戶移動的對話框位置,在closeEvent()中進行處理,而後在顯示以前,將對話框移動到該位置。
調用setModal(true)或者setWindowModality(),而後show()。有別於exec(),show() 當即返回給控制調用者。
對於進度對話框來講,調用setModal(true)是很是有用的,用戶必須擁有與其交互的能力,例如:取消長時間運行的操做。若是使用show()和setModal(true)共同執行一個長時間操做,則必須按期在執行過程當中調用QApplication ::processEvents(),以使用戶可以與對話框交互(能夠參考QProgressDialog)。
今天主要講解三者之間的異同點,並未一一列出全部的描述及用法,後期的實戰過程當中會進行詳細講解,例如:一些經常使用的對話框-QFileDialog、QColorDialog、QMessageBox等的用法,主窗體QMainWindow中如何添加菜單欄、工具欄 、懸浮窗體等,QWidget及其子類-QLabel、QPushButton、QCheckBox等的用法。
原文做者:一去丶二三裏
做者博客:去做者博客空間