Qt中的窗口部件


Qt中的窗口部件

QMainWindow:帶有菜單欄、工具欄的主窗口類,QDialog:是各種對話框的基類,它們全部繼承自QWidget,其實所有的窗口部件都繼承自QWidget。QWidget繼承自QObject和QPaintDevice類,其中QObject類是所有支持Qt對象模型(Qt QObject Model)的基類,QPaintDevice類是所有可以繪制的對象的基類。

Qt窗口部件、窗口類型、幾何布局

QWidget的構造函數有兩個參數:QWidget * parent = 0 和Qt::WindowFlags f =0,前面的parent就是指父窗口部件,默認值為0,表明沒有父窗口;而后面的f參數是Qt::WindowFlags類型,是一個枚舉類型,分為窗口類型(WindowType)和窗口標志(WindowFlags)。前者可以定義窗口的類型,比如f =0表明使用了Qt::Widget一項,這是QWidget的默認類型,這種類型的部件如果有父窗口,那么他就是子部件,否則就是獨立的窗口。窗口標志的作用是更改窗口的標題欄和邊框,而且可以和窗口類型進行位或操作。QWidget中還有一個setWindowState()函數可以用來設置窗口的狀態,比如最大化Qt::WindowMaximized、最小化Qt::WindowMinimized和全屏顯示Qt::WindowFullScreen等,這個函數的默認設置為Qt::WindowNoState。
窗口的幾何布局
對於一個窗口要設置它的大小和運行時出現的位置,根據是否包含邊框和標題欄兩種情況,要使用不同的函數來獲取
這里寫圖片描述
包含框架:x()、y()、frameGeometry()、pos()、move()等函數
不包含框架:geometry()、width()、height()、rect()、size()等函數
對話框
兩種不同類型的對話框、多窗口組成並且窗口間相互切換的程序、Qt提供的標准對話框
模態和非模態對話框
QDialog dialog 定義一個對象
QDialog *dialog 定義一個指向QDialog類對象的指針變量
模態對話框:在沒有關閉它之前,不能再與同一個應用程序的其他窗口進行交互
非模態對話框:既可以與它交互,也可以與同一程序的其他窗口交互
要想使一個對話框成為模態對話框,只需要調用它的exec()函數,而要使其成為非模態對話框,可以使用new操作來創建,然后使用show()函數來顯示。
與setModel()函數類似還有一個setWindowModality()函數,它有一個參數來設置模態對話框要阻塞的窗口類型,可以是Qt::NonModal(不阻塞任何窗口,就是非模態),Qt::WindowModal(阻塞它的父窗口和所有祖先窗口以及它們的子窗口)、Qt::ApplicationModal(阻塞整個應用程序的所有窗口)三者之一,而setModal()函數默認設置的是Qt::ApplicationModal
標准對話框
Qt提供了一些常用的對話框類型,全部繼承自QDialog類
顏色對話框類 QColorDialog
QColor(ARGB 1, 1, 0, 0),這里的4個數值分別代表透明度(alpha)、紅色(red)、綠色(green)、藍色(blue)。它們的數值都是從0.0~1.0,有效數字為6位。對於alpha來說,1.0表示完全不透明,這是默認值,而0.0表示完全透明。對於三基色紅、綠、藍的數值,還可以使用0~255來表示。其中0表示顏色最淺,255表示顏色最深。在0~255與0.0~1.0之間可以通過簡單的數學運算啦對應,其中0對應於0.0,255對應於1.0.
文件件對話框類 QFileDialog
getOpenFileName() 獲取選擇的文件名
getSaveFileName() 保存文件對話框和文件另存為對話框
getExistingDirectory() 獲取一個已存在的文件夾路徑
字體對話框 QFontDialog
輸入對話框 QInputDialog
消息對話框QmessageBox類提供了一個模態對話框用來通知用戶一些信息,或者向用戶提出一個問題並且獲取答案
進度對話框QProgressDialog
錯誤消息對話框 QerrorMessage
向導對話框 Qwizard

其他窗口部件
QFrame類是帶有邊框的部件的基類。對於QFrame的子類,它們都繼承了Qframe邊框設置功能

布局管理
這里寫圖片描述
QBoxLayout(基本布局管理器)、QGridLayout(柵格布局管理器)、QFormLayout(表單布局管理器)、QStackedLayout(棧布局管理器)
基本布局管理器(QBoxLayout)
layoutSpacing 布局管理器中各個子部件間的距離
layoutStretch 伸縮因子
layoutSizeConstraint 設置大小約束條件

//void QLayout::setContentsMargins ( int left, int top, int right, int bottom )
//4個參數順序是左、上、右、下
//將這個布局設置為MyWidget類的布局
layout->setContentsMargins(50,0,50,100);

柵格布局管理器 (QGridLayout)

QGridLayout *layout = new QGridLayout;
//添加部件,從第0行0列開始,占據1行2列
layout->addWidget(ui->fontComboBox,0,0,1,2);
//添加部件,從第0行2列開始,占據1行1列
layout->addWidget(ui->pushButton,0,2,1,1);
//添加部件,從第1行0列開始,占據1行3列
layout->addWidget(ui->textEdit,1,0,1,3);
setLayout(layout);

表單布局管理器(QFormLayout)
管理表格的輸入部件及其相關的標簽,將它的子部件分為兩列,左邊是一些標簽,右邊是一些輸入部件。可以在代碼中使用addRow()函數來完成。
設置部件大小
大小提示(sizeHint)、最小大小提示(minimumSizeHint),其中sizeHint屬性保存了部件的建議大小,對於不同的部件,默認擁有不同的sizeHint;而minimumSizeHint保存了一個建議的最小大小。可以使用sizeHint()函數來獲取sizeHint的值,使用minimumSizeHint()函數獲取minimumSizeHint的值。

大小策略(sizePolicy)
保存了部件的默認布局行為,在水平和垂直兩個方向上分別起作用,控制着部件在布局管理器中的大小變化行為。
這里寫圖片描述

這里寫圖片描述


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com