版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章布局管理4.1
分割窗口QSplitter類(lèi)4.2
??看翱赒DockWidget類(lèi)4.3
堆棧窗體QStackedWidget類(lèi)4.4
基本布局(QLayout)窗體上的所有的控件必須有一個(gè)合適的尺寸和位置。Qt提供了一些類(lèi)負(fù)責(zé)排列窗體上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLayout。其他能夠進(jìn)行布局管理的類(lèi)還有QSplitter,QScrollArea,QMainWindow,QWorkspace。這些類(lèi)的共同特點(diǎn)是提供了更加靈活的布局管理,在一定程度上用戶(hù)能夠控制窗體內(nèi)控件的大小。例如,QSplitter
類(lèi)顯示一個(gè)分隔條(splitterbar),用戶(hù)拖動(dòng)分隔條時(shí)就可以改變控件的大小。QWorkspace
提供了對(duì)多文檔(MDI,multipledocumentinterface)的支持使用這些Qt布局管理類(lèi)的另一個(gè)原因是,在程序改變字體,語(yǔ)言或者在不同的平臺(tái)上運(yùn)行時(shí),布局管理器能夠自動(dòng)調(diào)整窗體里所有控件的大小和尺寸4.1分割窗口QSplitter類(lèi)下面介紹一個(gè)十分簡(jiǎn)單的分割窗口功能,整個(gè)對(duì)話(huà)框由3個(gè)窗口組成,各窗口之間的大小可隨意拖動(dòng)改變,效果如圖4.1所示。一個(gè)QSplitter
控件中可以包含其他控件,這些控件被一個(gè)分隔條隔開(kāi),托拽這個(gè)分隔條,里面的控件的大小可以改變。QSplitter
控件經(jīng)常做為布局管理器使用,給用戶(hù)提供更多的界面控制。QSplitter
控件中的子控件總是按順序自動(dòng)水平排列(或者上下排列)。相鄰的控件之間有一個(gè)分隔條這個(gè)例子中的窗體有一個(gè)QSplitter
控件,其中有三個(gè)水平排列的QTextEdit
控件,和布局管理器不同,QSplitter
不但可以排列子控件,還有一個(gè)可視的外觀(guān),QSplitter
控件從QWidget繼承,擁有QWidget
所有的功能。int
main(int
argc,char*argv[]){QApplication
app(argc,argv);QTextEdit*editor1=newQTextEdit;QTextEdit*editor2=newQTextEdit;QTextEdit*editor3=newQTextEdit;QSplitter
splitter(Qt::Horizontal);splitter.addWidget(editor1);splitter.addWidget(editor2);splitter.addWidget(editor3);...splitter.show();returnapp.exec();}QtDesigner也支持QSplitter。把子控件放到合適的位置,把他們選中,選擇菜單Form|LayoutHorizontallyinSplitter
或者Form|LayoutVerticalllyinSplitter,所選擇的子控件就被加入到QSplitter
控件中。對(duì)QSplitter
進(jìn)行水平或者垂直嵌套可以實(shí)現(xiàn)更加復(fù)雜的布局。例如,圖
所示的MailClient程序中,就是一個(gè)垂直方向的QSplitter
控件中嵌套了一個(gè)水平方向的QSplitter
控件。111創(chuàng)建完我們所需要顯示三個(gè)控件(messageTreeWidget,textEdit,foldersTreeWidget)后,我們創(chuàng)建一個(gè)垂直的QSplitter,rightSplitter
控件,把messageTreeWidget
和textEdit控件加到rightSplitter
中。然后創(chuàng)建一個(gè)水平的QSplitter,mainSplitter
控件,把rightSplitter
和foldersTreeWidget
加入到mainSplitter
中。把mainSplitter
做為QMainWindow
的中央控件。下面的代碼是MailClient
程序的主窗口類(lèi)構(gòu)造函數(shù)代碼:MailClient::MailClient(){...rightSplitter=newQSplitter(Qt::Vertical);rightSplitter->addWidget(messagesTreeWidget);rightSplitter->addWidget(textEdit);rightSplitter->setStretchFactor(1,1);mainSplitter=newQSplitter(Qt::Horizontal);mainSplitter->addWidget(foldersTreeWidget);mainSplitter->addWidget(rightSplitter);mainSplitter->setStretchFactor(1,1);setCentralWidget(mainSplitter);setWindowTitle(tr("MailClient"));readSettings();}當(dāng)用戶(hù)改變窗口的大小時(shí),QSplitter
通常給所有的子控件一樣的空間。在MailClient
程序中,我們希望左邊的文件樹(shù)控件(foldersTreeWidget)和消息樹(shù)控件(messageTreeWidget)保持它們的大小,把其他的空間都分配給QTextEdit。這由兩個(gè)setStretchFactor()調(diào)用實(shí)現(xiàn)。第一個(gè)參數(shù)是0開(kāi)始的子控件的索引值,第二個(gè)參數(shù)為我們?cè)O(shè)置的拉伸系數(shù),缺省值為0。4.1分割窗口QSplitter類(lèi)(1)創(chuàng)建一個(gè)工程,創(chuàng)建過(guò)程在第2章中已經(jīng)詳細(xì)介紹過(guò),在這里就不在贅述。需要注意的是,創(chuàng)建過(guò)程在“Qt4GuiApplication”界面中,BaseClass選擇“QMainwindow”選項(xiàng),取消“Gernerateform”復(fù)選框的選中狀態(tài)。(2)在上述工程的main.cpp文件中添加如下灰色背景代碼。P89(3)在main.cpp文件的開(kāi)始部分加入以下頭文件:#include<Qsplitter>#include<QTextEdit>#include<QTextCodec>(4)運(yùn)行程序,顯示效果如圖4.1所示。函數(shù)說(shuō)明:P89-90可??靠丶軌蛲?吭赒MainWindow
中或者作為一個(gè)獨(dú)立窗口浮動(dòng)。QMainWindow
提供了四個(gè)可??靠丶牡胤剑荷戏?,下方,左方,右方。在Qt中,可??看翱谑荙DockWidget的一個(gè)實(shí)例。每一個(gè)可停靠控件都有一個(gè)標(biāo)題條。用戶(hù)可以拖動(dòng)標(biāo)題欄把窗口從一個(gè)可??繀^(qū)域移動(dòng)到另一個(gè)可停靠區(qū)域。拖動(dòng)標(biāo)題欄把窗口移動(dòng)到不能停靠的區(qū)域,窗口就浮動(dòng)為一個(gè)獨(dú)立的窗口。自由浮動(dòng)的窗口總是在主窗口的上面。用戶(hù)點(diǎn)擊標(biāo)題欄上的關(guān)閉按鈕可以關(guān)閉QDockWidget。調(diào)用QDockWidget::setFeatures()能夠設(shè)置以上這些屬性。4.2??看翱赒DockWidget類(lèi)停靠窗口QDockWidget類(lèi)也是應(yīng)用程序中經(jīng)常用到的,設(shè)置??看翱诘囊话懔鞒虨椋?1)創(chuàng)建一個(gè)QDockWidget對(duì)象的??看绑w。(2)設(shè)置此停靠窗體的屬性,通常調(diào)用setFeatures()及setAllowedAreas()兩種方法(P92)。(3)新建一個(gè)要插入??看绑w的控件,常用的一般為QListWidget和QTextEdit。(4)把控件插入??看绑w,調(diào)用QDockWidget的setWidget()方法。(5)使用addDockWidget()方法在MainWidow中加入此??看绑w。4.2??看翱赒DockWidget類(lèi)下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)學(xué)習(xí)??看翱赒DockWidget類(lèi)的使用,效果如圖4.2所示。窗口1只可在主窗口的左邊和右邊停靠;窗口2只可在浮動(dòng)和右部???jī)煞N狀態(tài)間切換,并且不可移動(dòng);窗口3可實(shí)現(xiàn)停靠窗口的各個(gè)狀態(tài)。4.2??看翱赒DockWidget類(lèi)(1)創(chuàng)建一個(gè)工程,創(chuàng)建過(guò)程中在“Qt4GuiApplication”界面中“BaseClass”下拉列表框中選擇“QMainwindow”選項(xiàng),??看翱贒ockWindows類(lèi)繼承自QMainWindow類(lèi),??看翱谥辉谥鞔翱赒MainWindow中使用。因此,在“Classname”后面的文本框中輸入“DockWindows”,取消“Gernerateform”復(fù)選框的選中狀態(tài),如圖4.3所示。4.2??看翱赒DockWidget類(lèi)(2)DockWindows類(lèi)說(shuō)明中只有一個(gè)構(gòu)造函數(shù)的說(shuō)明。代碼如下:classDockWindows:publicQMainWindow{Q_OBJECTpublic:
DockWindows(QWidget*parent=0);~DockWindows();};(3)打開(kāi)“dockwindows.cpp”文件,DockWindows類(lèi)構(gòu)造函數(shù)實(shí)現(xiàn)窗口的初始化及功能實(shí)現(xiàn),具體代碼。P92(4)在dockwindows.cpp文件的開(kāi)始部分加入以下頭文件:#include<QTextEdit>#include<QDockWidget>(5)運(yùn)行程序,顯示效果如圖4.2所示。QStackedLayout
類(lèi)把子控件進(jìn)行分組或者分頁(yè),一次只顯示一組或者一頁(yè),隱藏其他組或者頁(yè)上的控件。QStackedLayout
本身并不可見(jiàn),對(duì)換頁(yè)也不提供本質(zhì)的支持。為了方便起見(jiàn),Qt還提供了類(lèi)QStackedWidget,這個(gè)類(lèi)的布局管理器為QStackedLayout。創(chuàng)建一個(gè)QListWidget,它的每一項(xiàng)為一個(gè)控件頁(yè)的名字。然后創(chuàng)建一個(gè)QStackedLayout,調(diào)用addWidget()把每一頁(yè)的控件加入到布局中。連接QListWidget
的信號(hào)currentRowChanged(int)和QStackedLayout
的函數(shù)setCurrentIndex(int)連接,改變QListWidget
的當(dāng)前項(xiàng)時(shí)換頁(yè)。最后調(diào)用QListWidget
把開(kāi)始頁(yè)設(shè)置為0。這樣的對(duì)話(huà)框使用QtDesigner會(huì)更加簡(jiǎn)單:1.用“Dialog”或者“Widget”模板創(chuàng)建一個(gè)窗體、2.在窗體上增加一個(gè)QListWidget
和一個(gè)QStackedWidget
控件。3.給每一頁(yè)添加子控件,子控件按布局排列好(右擊QStackedWidget
控件,選擇InsertPage菜單便可創(chuàng)建一個(gè)新頁(yè)。點(diǎn)擊右上角的左右鍵頭,可以在頁(yè)和頁(yè)之間切換)。4.把QListWidget
和QStackedWidget
用水平布局管理。5.連接QListWidget
控件的currentRowChanged(int)信號(hào)和QStackedWidget
控件的槽setCurrentIndex(int)。6.設(shè)置當(dāng)前QListWidget
控件的currentRow
屬性為0。在QtDesigner中預(yù)覽時(shí),點(diǎn)擊列表控件中不同的項(xiàng)目,窗體就會(huì)換為不同的頁(yè)。4.3堆棧窗體QStackedWidget類(lèi)下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)學(xué)習(xí)堆棧窗體QStackedWidget類(lèi)的使用,當(dāng)選擇左側(cè)列表框中不同的選項(xiàng)時(shí),右側(cè)顯示所選的不同的窗體。在此使用列表框QListWidget,效果如圖4.4所示。4.3堆棧窗體QStackedWidget類(lèi)(1)創(chuàng)建一個(gè)工程,創(chuàng)建過(guò)程中在“Qt4GuiApplication”界面中選擇“BaseClass”下拉列表框中“QDialog”選項(xiàng),??看绑wStackDlg類(lèi)繼承自QDialog類(lèi),并聲明所用到的控件。因此,在“Classname”后面的文本框中輸入“StackDlg”,取消“Gernerateform”復(fù)選框的選中狀態(tài),如圖4.5所示。4.3堆棧窗體QStackedWidget類(lèi)(2)打開(kāi)stackdlg.h文件,添加如下加黑代碼:classStackDlg:publicQDialog{Q_OBJECTpublic:StackDlg(QWidget*parent=0);~StackDlg();private:QListWidget*list;QStackedWidget*stack;QLabel*label1;QLabel*label2;QLabel*label3;};在文件開(kāi)始部分添加以下頭文件:#include<QListWidget>#include<QStackedWidget>#include<QLabel>4.3堆棧窗體QStackedWidget類(lèi)(3)打開(kāi)stackdlg.cpp文件,在??看绑wStackDlg類(lèi)的構(gòu)造函數(shù)中添加代碼。P95(4)在stackdlg.cpp文件的開(kāi)始部分加入以下頭文件:#include<QHBoxLayout>(5)運(yùn)行程序,顯示效果如圖4.4所示。這樣的對(duì)話(huà)框使用QtDesigner會(huì)更加簡(jiǎn)單:1.用“Dialog”或者“Widget”模板創(chuàng)建一個(gè)窗體、2.在窗體上增加一個(gè)QListWidget
和一個(gè)QStackedWidget
控件。3.給每一頁(yè)添加子控件,子控件按布局排列好(右擊QStackedWidget
控件,選擇InsertPage菜單便可創(chuàng)建一個(gè)新頁(yè)。點(diǎn)擊右上角的左右鍵頭,可以在頁(yè)和頁(yè)之間切換)。4.把QListWidget
和QStackedWidget
用水平布局管理。5.連接QListWidget
控件的currentRowChanged(int)信號(hào)和QStackedWidget
控件的槽setCurrentIndex(int)。6.設(shè)置當(dāng)前QListWidget
控件的currentRow
屬性為0。在QtDesigner中預(yù)覽時(shí),點(diǎn)擊列表控件中不同的項(xiàng)目,窗體就會(huì)換為不同的頁(yè)。第4章布局管理4.1
分割窗口QSplitter類(lèi)4.2
停靠窗口QDockWidget類(lèi)4.3
堆棧窗體QStackedWidget類(lèi)4.4
基本布局(QLayout)管理窗體上控件最簡(jiǎn)單的方法就是使用Qt的布局管理類(lèi)。這些類(lèi)能夠給出所有類(lèi)型控件的默認(rèn)值,能夠根據(jù)控件的字體,樣式,內(nèi)容得到不同的控件的sizeHint。布局管理類(lèi)能夠得到控件的最大,最小尺寸,在字體,內(nèi)容或者窗口改變時(shí)自動(dòng)調(diào)整布局。QHBoxLayout,QVBoxLayout,QGridLayout
是三個(gè)最重要的布局管理器,這些類(lèi)從QLayout
繼承,QLayout
提供布局最基本的框架。這三個(gè)類(lèi)可以在代碼中使用,也可以在QtDesigner
中使用4.4基本布局(QLayout)Qt提供了QHBoxLayout類(lèi)、QVBoxLayout類(lèi)及QGridLayout類(lèi)等的基本布局管理,分別是水平排列布局、垂直排列布局和網(wǎng)格排列布局。它們之間的繼承關(guān)系如圖4.6所示。QHBoxLayout
和QVBoxLayout
的使用很簡(jiǎn)單,QGridLayout
有點(diǎn)復(fù)雜。QGridLayout
工作的基礎(chǔ)是一個(gè)二維的單元格4.4基本布局(QLayout)布局中常用的方法有addWidget()和addLayout()。addWidget()方法用來(lái)向布局中加入需布局的控件,addWidget()的函數(shù)原型如下:voidaddWidget(QWidget*widget, //為需插入的控件對(duì)象int
fromRow, //為插入的行int
fromColumn, //為插入的列int
rowSpan, //表示占用的行數(shù)int
columnSpan, //表示占用的列數(shù)Qt::Alignmentalignment=0 //描述各控件的對(duì)齊方式)4.4基本布局(QLayout)addLayout()方法用來(lái)向布局中加入需布局的子布局,addLayout()的函數(shù)原型如下:voidaddLayout(QLayout*layout, //表示要插入的子布局對(duì)象introw, //插入的起始行intcolumn, //插入的起始列int
rowSpan, //表示占用的行數(shù)int
columnSpan, //表示占用的列數(shù)Qt::Alignmentalignment=0 //指定對(duì)齊方式)補(bǔ)充:函數(shù)addStretch()使布局管理器在指定的位置留出一塊空間。例中,布局管理器在“確定”按鈕和“取消”按鈕前留出一個(gè)額外的空隙。P100在QtDesigner中,我們可以加入一個(gè)spacer實(shí)現(xiàn)這一功能,在QtDesigner中,spacer表現(xiàn)為藍(lán)色的彈簧式折線(xiàn)。補(bǔ)充:也可以使用QtDesigner實(shí)現(xiàn),首先把所有的子控件放置在近似適當(dāng)?shù)奈恢?,選擇需要布局管理器一同管理的控件(或者布局),點(diǎn)擊Form|LayoutHorizontally,F(xiàn)orm|LayoutVertically或者Form|LayoutinaGrid。通過(guò)屬性設(shè)置布局管理器拖拽操作等4.4基本布局(QLayout)本小節(jié)將通過(guò)實(shí)現(xiàn)一個(gè)“用戶(hù)基本資料修改”的功能來(lái)介紹如何使用基本布局管理,如QHBoxLayout類(lèi)、QVBoxLayout類(lèi)及QGridLayout類(lèi),效果如圖4.7所示。4.4基本布局(QLayout)本實(shí)例共用到5個(gè)布局管理器,分別是LeftLayout、TopRightLayout、RightLayout、BottomLayout和MainLayout,其布局框架如圖4.8所示。TopRightLayout用QHBoxLayout實(shí)現(xiàn)4.4基本布局(QLayout)(1)創(chuàng)建一個(gè)工程,在創(chuàng)建過(guò)程中,創(chuàng)建過(guò)程中在“Qt4GuiApplication”界面中,選擇“BaseClass”下拉列表框中“QDialog”選項(xiàng),取消“Gernerateform”復(fù)選框的選中狀態(tài)。(2)打開(kāi)“dialog.h”頭文件,在頭文件中聲明對(duì)話(huà)框中的各個(gè)控件。添加代碼P98。接著添加如下的頭文件:#include<QLabel>#include<QLineEdit>#include<QComboBox>#include<QTextEdit>#include<QGridLayout>4.4基本布局(QLayout)(3)打開(kāi)“dialog.cpp”文件,在類(lèi)Dialog的構(gòu)造函數(shù)中添加代碼
P98。(4)在dialog.cpp文件的開(kāi)始部分加入以下頭文件:#include<QLabel>#include<QLineEdit>#include<QComboBox>#include<QPushButton>#include<QFrame>#include<QGridLayout>#include<QPixmap>#include<QHBoxLayout>4.4基本布局(QLayout)(5)打開(kāi)main.cpp文件,在主函數(shù)中添加以下加黑代碼:int
main(int
argc,char*argv[]){
QApplication
a(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
//在窗口中顯示中文Dialogw;
w.sho
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 混合動(dòng)力電動(dòng)汽車(chē)結(jié)構(gòu)原理與檢修 第2版 課件 學(xué)習(xí)情景2 混合動(dòng)力電動(dòng)汽車(chē)高壓維修操作安全
- 年末晚會(huì)活動(dòng)策劃方案(3篇)
- 牛雜店工人管理制度范本(3篇)
- 甲醇爐燃?xì)獍踩芾碇贫?3篇)
- 獸藥質(zhì)檢培訓(xùn)
- 線(xiàn)上幫辦團(tuán)隊(duì)管理制度內(nèi)容(3篇)
- 蔬菜種植后期管理制度(3篇)
- 通信網(wǎng)管中心管理制度(3篇)
- 飯店協(xié)會(huì)檔案管理制度(3篇)
- 《GA 1016-2012槍支(彈藥)庫(kù)室風(fēng)險(xiǎn)等級(jí)劃分與安全防范要求》專(zhuān)題研究報(bào)告
- 2025年廣東省中考語(yǔ)文試卷真題(含答案解析)
- 燙熨治療法講課件
- 2025至2030中國(guó)模塊化變電站行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢(xún)研究報(bào)告
- 電廠(chǎng)清潔生產(chǎn)管理制度
- 2025年江蘇省事業(yè)單位招聘考試教師招聘體育學(xué)科專(zhuān)業(yè)知識(shí)試題
- 機(jī)械設(shè)計(jì)年終述職報(bào)告
- 可信數(shù)據(jù)空間解決方案星環(huán)科技
- 建筑工程監(jiān)理服務(wù)承諾書(shū)范文
- 知榮明恥主題班會(huì)課件
- 職業(yè)技術(shù)學(xué)院工業(yè)機(jī)器人技術(shù)高職技能考核標(biāo)準(zhǔn)1022(簡(jiǎn)化版)
- 聲學(xué)基礎(chǔ)課后題答案
評(píng)論
0/150
提交評(píng)論