1. 程式人生 > >【Qt】QWidget、QDialog、QMainWindow的異同點【轉】

【Qt】QWidget、QDialog、QMainWindow的異同點【轉】

簡述

在分享所有基礎知識之前,很有必要在這裡介紹下常用的視窗-QWidget、QDialog、QMainWindow。

熟悉Qt的同學都應該知道,在新建Qt Widgets專案進行類資訊選擇時會碰到它們,沒錯,很巧,每次都能碰到。所以,在以後的Qt開發中,我們會經常和它們打交道。常言道,知己知彼,百戰不殆。只有瞭解它們、熟悉它們,才能更好地駕馭它們。。。

QWidget繼承於QObject和QPaintDevice,QDialog和QMainWindow則繼承於QWidget,QDialog、QMainWindow兩者之間沒有直接關係。淘氣的小盆友又不高興了,它倆分明同屬於一個父親,那就是兄弟姊妹關係O(∩_∩)O哈哈哈~。

QWidget

QWidget類是所有使用者介面物件的基類。

視窗部件是使用者介面的一個原子:它從視窗系統接收滑鼠、鍵盤和其它事件,並且將自己的表現形式繪製在螢幕上。每一個視窗部件都是矩形,並且它們按Z軸順序排列。一個視窗部件可以被它的父視窗部件或者它前面的視窗部件蓋住一部分。

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

沒有父窗體的小部件始終是一個獨立的視窗(頂級視窗部件)。非視窗的小部件為子部件,它們在父視窗中顯示。Qt中大多數部件主要被用作子部件。例如:可以顯示一個按鈕作為頂層視窗,但大多數人更喜歡將按鈕內置於其它部件,如QDialog。

這裡寫圖片描述

上圖顯示了一個QGroupBox,裡面包含了大量由QGridLayout佈局的子控制元件。

QMainWindow

QMainWindow類提供一個有選單條、工具欄、狀態條的主應用程式視窗(例如:開發Qt常用的IDE-Visual Studio、Qt Creator等)。

一個主視窗提供了構建應用程式的使用者介面框架。Qt擁有QMainWindow及其相關類來管理主視窗。

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

例如:

這裡寫圖片描述

QDialog

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)。

使用原則

  • 如果需要嵌入到其他窗體中,則基於QWidget建立。
  • 如果是主窗體,則基於QMainWindow建立。
  • 如果是頂級對話方塊,則基於QDialog建立。

今天主要講解三者之間的異同點,並未一一列出所有的描述及用法,後期的實戰過程中會進行詳細講解,例如:一些常用的對話方塊-QFileDialog、QColorDialog、QMessageBox等的用法,主窗體QMainWindow中如何新增選單欄、工具欄 、懸浮窗體等,QWidget及其子類-QLabel、QPushButton、QCheckBox等的用法。

相關推薦

QTQWidgetQDialogQMainWindow的區別

屏幕 編輯 派生 標記 裝飾 按鈕 set 沒有 idg QWidget類是所有用戶界面對象的基類。 窗口部件是用戶界面的一個基本單元:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己。每一個窗口部件都是矩形的,並且它們按Z軸順序排列。一個窗口部件可以被它的父窗口

QtQWidgetQDialogQMainWindow異同

簡述 在分享所有基礎知識之前,很有必要在這裡介紹下常用的視窗-QWidget、QDialog、QMainWindow。 熟悉Qt的同學都應該知道,在新建Qt Widgets專案進行類資訊選擇時會碰到它們,沒錯,很巧,每次都能碰到。所以,在以後的Qt開發中,我們會經常和它們打

Qt視窗之QMainWindowQDialogQWidget

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/rl529014/article/details/51419126   在 Qt 中,我們將視窗和控制元件統稱為部件(Widget)。   視窗是指程式的整體介面

QTQT Widgets Application中QWidgetQDialogQMainWindow的區別

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

QWidgetQDialogQMainWindow異同

簡述 在分享所有基礎知識之前,很有必要在這裡介紹下常用的視窗 - QWidget、QDialog、QMainWindow。 QWidget繼承於QObject和QPaintDevice,QDialog和QMainWindow則繼承於QWidget,QDial

QWIDGETQMAINWINDOWQFRAMEQWINDOWQDIALOGQSCROLLAREA區別

QWindow一般不用 QDialog對話方塊而已 QScrollArea有滾動條的視窗。 from PyQt5.QtWid

Qt 筆記: QWidgetQDialog

QWidget類繼承自QObject類和QpaintDevice類 - QObject是所有支援Qt物件模型的基類 - QPaintDevice是Qt中所有可繪製元件的基類 QWidget能夠繪製自己和處理使用者的輸入 -QWidget是Qt中所有視窗元

Qt多執行緒之執行緒的等待和喚醒QWaitCondition

QWatiCondition的成員函式 ·QWaitCondition() ·~QWaitCondition() ·bool wait ( QMutex * mutex, unsigned long time = ULONG_MAX ) ·vo

架構(三層架構)框架(MVC)設計模式三者異同

前言: 本部落格主要針對架構、框架和設計模式三者的區別、還有三層和MVC的區別進行討論、對於這三者一點都不瞭解的、請點在維基和百度百科上補補課、這裡就不發連結了 軟體架構(software arch

ArcGIS中各種合併要素(UnionMergeAppendDissolve)的異同分析

ArcGIS中將兩個要素類合併成一個要素有Union、Dissolve、Append、Merge等,在Arctoolbox中均有相應工具,但功能上有所不同:Union:合併輸入要素類到新的要素類中。圖形:union只能合併polygon型別的要素類。兩個要素類合併時會處理相交

QT——QWidgetQMainWindow QDialog用法區別解析

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

QTQT的學習:qml中使用listmodelistview實現選項的變換操作,類似qwidget中listwidget的作用。

(1)方法一:點選某一選項,某一個選項的顏色就立即會發生變化 ListView { id : m_listView anchors.fill: parent anchors.margins: 20 clip: true model: ["A","B","C","D","E"

QTQMainWindowQWidgetQDialog

qdoc mes ica 管理器 pro 執行過程 src 類型 獲得 QT中QMainWindow、QWidget、QDialog 簡述 在分享所有基礎知識之前,很有必要在這裏介紹下常用的窗口-QWidget、QDialog、QMainWindow。 熟悉Qt的同學

python qt(pyqt)的文件打開文件保存文件夾選擇對話框

utf spl 文件對話框 出現 tin ans none 轉換 選擇文件夾 import PyQt4.QtCore,PyQt4.QtGui # 獲取文件路徑對話框 file_name = QFileDialog.getOpenFileName(self,"open

Qt開發QThread中的互斥讀寫鎖訊號量條件變數

在gemfield的《從pthread到QThread》一文中我們瞭解了執行緒的基本使用,但是有一大部分的內容當時說要放到這片文章裡討論,那就是執行緒的同步問題。關於這個問題,gemfield在《從進 程到執行緒》中有一個比喻,有必要重新放在下面溫習下: ***************

QTQT的學習:char×跟QStringstring之間的轉換

(1)QString轉成char*或者char陣列。 QString data; QByteArray tempData = data.toLocal8Bit(); char *value = (ch

Qt選單欄工具欄狀態列右鍵選單的實現

在QMainWidget基礎上實現選單欄、工具欄、狀態列、右鍵選單。 標頭檔案: #ifndef GWDEMO_H #define GWDEMO_H #include <QMainWindow> #include <QMenu> #include <Q

QtQt的GUI設計與製作(下篇:高階控制元件Qt Designer對話方塊)

高階控制元件 Qt為了方便GUI的設計,不僅僅提供了QPushButton、QLabel這樣的單一控制元件,還提供了可以將多個控制元件功能合為一體的高階控制元件類。如:顯示日曆的QCalendarWidget類,還提供了將多個控制元件功能融為一體的控制元件。 QCalendarWidge

QTQT從零入門教程(四):選單欄工具欄狀態列

  選單欄、工具欄、工作列是軟體中常見的元件,本節將會講解如何建立選單欄並生成一級選單、二級選單,如何在工具欄中新增圖示和控制元件,如何在工作列中顯示文字。 標題及圖示 // 標題大小 setWindowTitle("影象處理自編軟體 by

QTQT從零入門教程(九):QT常用控制元件 [QSliderQSpinBoxQComboBoxQRadioButton]

QSlider 滑動條與QSpinBox微調框 (這裡只貼出控制元件的基本用法,需要時再查閱資料。) QSlider *slider = new QSlider(Qt::Horizontal); // 建立水平滑動條 slider->setRange