Qt 5 開(kāi)發(fā)及實(shí)例(第5版) 課件 第5章 Qt 5主窗口及實(shí)例_第1頁(yè)
Qt 5 開(kāi)發(fā)及實(shí)例(第5版) 課件 第5章 Qt 5主窗口及實(shí)例_第2頁(yè)
Qt 5 開(kāi)發(fā)及實(shí)例(第5版) 課件 第5章 Qt 5主窗口及實(shí)例_第3頁(yè)
Qt 5 開(kāi)發(fā)及實(shí)例(第5版) 課件 第5章 Qt 5主窗口及實(shí)例_第4頁(yè)
Qt 5 開(kāi)發(fā)及實(shí)例(第5版) 課件 第5章 Qt 5主窗口及實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

QT5開(kāi)發(fā)及實(shí)例(第5版)第5章Qt

5主窗口及實(shí)例——Qt5主窗口構(gòu)成01基

素1.菜單欄2.狀態(tài)欄3.工具欄4.錨接部件5.中心部件基本元素QMainWindow是一個(gè)為用戶提供主窗口程序的類(lèi),包含一個(gè)菜單欄(menubar)、多個(gè)工具欄(toolbars)、多個(gè)錨接部件(dockwidgets)、一個(gè)狀態(tài)欄(statusbar)及一個(gè)中心部件(centralwidget),是許多應(yīng)用程序(如文本編輯器、圖片編輯器等)的基礎(chǔ)。Qt主窗口界面布局如圖?;驹?.菜單欄菜單是一系列命令的列表。為了實(shí)現(xiàn)菜單、工具欄按鈕、鍵盤(pán)快捷方式等命令的一致性,Qt使用動(dòng)作(Action)來(lái)表示這些命令。Qt的菜單就是由一系列的QAction動(dòng)作對(duì)象構(gòu)成的列表,而菜單欄則是包容菜單的面板,它位于主窗口標(biāo)題欄的下面。一個(gè)主窗口只能有一個(gè)菜單欄。2.狀態(tài)欄狀態(tài)欄通常顯示GUI應(yīng)用程序的一些狀態(tài)信息,它位于主窗口的底部。用戶可以在狀態(tài)欄上添加、使用Qt窗口部件。一個(gè)主窗口只能有一個(gè)狀態(tài)欄?;驹?.工具欄工具欄是由一系列的類(lèi)似于按鈕的動(dòng)作排列而成的面板,它通常由一些經(jīng)常使用的命令(動(dòng)作)組成。工具欄位于菜單欄的下面、狀態(tài)欄的上面,可以停靠在主窗口的上、下、左、右四個(gè)方向上。一個(gè)主窗口可以包含多個(gè)工具欄。4.錨接部件錨接部件作為一個(gè)容器使用,以包容其他窗口部件來(lái)實(shí)現(xiàn)某些功能。例如,Qt設(shè)計(jì)器的屬性編輯器、對(duì)象監(jiān)視器等都是由錨接部件包容其他的Qt窗口部件來(lái)實(shí)現(xiàn)的。它位于工具欄區(qū)的內(nèi)部,可以作為一個(gè)窗口自由地浮動(dòng)在主窗口上面,也可以像工具欄一樣??吭谥鞔翱诘纳?、下、左、右四個(gè)方向上。一個(gè)主窗口可以包含多個(gè)錨接部件。5.中心部件中心部件處在錨接部件區(qū)的內(nèi)部、主窗口的中心。一個(gè)主窗口只能有一個(gè)中心部件。02文本編輯器項(xiàng)目框架文本編輯器項(xiàng)目框架(1)文件操作功能:包括新建一個(gè)文件,利用標(biāo)準(zhǔn)文件對(duì)話框QFileDialog類(lèi)打開(kāi)一個(gè)已存在的文件,利用QFile和QTextStream讀取文件內(nèi)容,打印文件(分文本打印和圖片打?。Mㄟ^(guò)實(shí)例介紹標(biāo)準(zhǔn)打印對(duì)話框QPrintDialog類(lèi)的使用方法,以QPrinter作為QPaintDevice畫(huà)圖工具實(shí)現(xiàn)圖片打印。(2)圖片處理中的常用功能:包括圖片的縮放、旋轉(zhuǎn)、鏡像等坐標(biāo)變換,使用QMatrix實(shí)現(xiàn)圖片的各種坐標(biāo)變換。(3)開(kāi)發(fā)文本編輯功能:通過(guò)在工具欄上設(shè)置文字字體、字號(hào)大小、加粗、斜體、下畫(huà)線及字體顏色等快捷按鈕的實(shí)現(xiàn),介紹在工具欄中嵌入控件的方法。其中,通過(guò)設(shè)置字體顏色功能,介紹標(biāo)準(zhǔn)顏色對(duì)話框QColorDialog類(lèi)的使用方法。(4)排版功能:通過(guò)選擇某種排序方式實(shí)現(xiàn)對(duì)文本排序,以及實(shí)現(xiàn)文本對(duì)齊(包括左對(duì)齊、右對(duì)齊、居中對(duì)齊和兩端對(duì)齊)和撤銷(xiāo)、重做的方法。文本編輯器項(xiàng)目框架【例】(難度一般)(CH501)設(shè)計(jì)界面,效果如圖。文本編輯器項(xiàng)目框架首先建立項(xiàng)目的框架代碼,具體步驟如下。(1)以“直接編寫(xiě)代碼”(即取消勾選“Generateform”復(fù)選框)方式創(chuàng)建Qt項(xiàng)目,項(xiàng)目名ImageProcessor,“ClassInformation”頁(yè)基類(lèi)選“QMainWindow”,類(lèi)名命名為ImgProcessor。(2)添加該工程的提供主要顯示文本編輯框函數(shù)所在的文件,在ImageProcessor項(xiàng)目名上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加新文件...”選項(xiàng),在彈出的對(duì)話框中選擇“C++Class”選項(xiàng),單擊“Choose...”按鈕,在彈出的對(duì)話框的“Baseclass”下拉列表框中選擇基類(lèi)名“QWidget”,在“Classname”文本框中輸入類(lèi)的名稱(chēng)“ShowWidget”。(3)單擊“下一步”按鈕,單擊“完成”按鈕,添加“showwidget.h”頭文件和“showwidget.cpp”源文件。文本編輯器項(xiàng)目框架(4)打開(kāi)showwidget.h頭文件,具體代碼如下:#include<QWidget>#include<QLabel>#include<QTextEdit>#include<QImage>classShowWidget:publicQWidget{Q_OBJECTpublic:explicitShowWidget(QWidget*parent=0);QImageimg;QLabel*imageLabel;QTextEdit*text;signals:publicslots:};文本編輯器項(xiàng)目框架(5)打開(kāi)showwidget.cpp文件,添加如下代碼:#include"showwidget.h"#include<QHBoxLayout>ShowWidget::ShowWidget(QWidget*parent):QWidget(parent){imageLabel=newQLabel;imageLabel->setScaledContents(true);text=newQTextEdit;QHBoxLayout*mainLayout=newQHBoxLayout(this);mainLayout->addWidget(imageLabel);mainLayout->addWidget(text);}文本編輯器項(xiàng)目框架(6)主函數(shù)ImgProcessor類(lèi)聲明中的createActions()函數(shù)用于創(chuàng)建所有的動(dòng)作、createMenus()函數(shù)用于創(chuàng)建菜單、createToolBars()函數(shù)用于創(chuàng)建工具欄;接著聲明實(shí)現(xiàn)主窗口所需的各個(gè)元素,包括菜單、工具欄及各個(gè)動(dòng)作等;最后聲明用到的槽函數(shù),打開(kāi)imgprocessor.h文件,添加如下代碼。(7)下面是主窗口構(gòu)造函數(shù)部分的內(nèi)容,構(gòu)造函數(shù)主要實(shí)現(xiàn)窗體的初始化,打開(kāi)imgprocessor.cpp文件,添加如下代碼:ImgProcessor::ImgProcessor(QWidget*parent):QMainWindow(parent){setWindowTitle(tr("EasyWord")); //設(shè)置窗體標(biāo)題showWidget=newShowWidget(this); //(a)setCentralWidget(showWidget);/*創(chuàng)建動(dòng)作、菜單、工具欄的函數(shù)*/createActions();createMenus();createToolBars();if(img.load("image.png")){ //在imageLabel對(duì)象中放置圖片showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}}03菜單與工具欄的實(shí)現(xiàn)1.動(dòng)作(Action)的實(shí)現(xiàn)2.菜單(Menus)的實(shí)現(xiàn)3.工具欄(ToolBars)的實(shí)現(xiàn)菜單與工具欄的實(shí)現(xiàn)1.動(dòng)作(Action)的實(shí)現(xiàn)以下是實(shí)現(xiàn)基本文件操作的動(dòng)作(Action)的代碼。以下是實(shí)現(xiàn)打印文本和圖片、圖片縮放、旋轉(zhuǎn)和鏡像的動(dòng)作(Action)的代碼(位于ImgProcessor::createActions()方法中)。2.菜單(Menus)的實(shí)現(xiàn)在實(shí)現(xiàn)了各個(gè)動(dòng)作之后,需要將它們通過(guò)菜單、工具欄或快捷鍵的方式體現(xiàn)出來(lái),以下是菜單的實(shí)現(xiàn)函數(shù)createMenus()代碼。菜單與工具欄的實(shí)現(xiàn)3.工具欄(ToolBars)的實(shí)現(xiàn)接下來(lái)實(shí)現(xiàn)相對(duì)應(yīng)的工具欄createToolBars(),主窗口的工具欄上可以有多個(gè)工具條,通常采用一個(gè)菜單對(duì)應(yīng)一個(gè)工具條的方式,也可根據(jù)需要進(jìn)行工具條的劃分。工具條是一個(gè)可移動(dòng)的窗口,它可??康膮^(qū)域由QToolBar的allowAreas決定,包括Qt::LeftToolBarArea、Qt::RightToolBarArea、Qt::TopToolBarArea、Qt::BottomToolBarArea和Qt::AllToolBarAreas。默認(rèn)為Qt::AllToolBarAreas,啟動(dòng)后默認(rèn)出現(xiàn)于主窗口的頂部??赏ㄟ^(guò)調(diào)用setAllowedAreas()函數(shù)來(lái)指定工具條可??康膮^(qū)域,例如:fileTool->setAllowedAreas(Qt::TopToolBarArea|Qt::LeftToolBarArea);此函數(shù)限定文件工具條只可出現(xiàn)在主窗口的頂部或左側(cè)。工具條也可通過(guò)調(diào)用setMovable()函數(shù)設(shè)定可移動(dòng)性,例如:fileTool->setMovable(false);指定文件工具條不可移動(dòng),只出現(xiàn)于主窗口的頂部。菜單與工具欄的實(shí)現(xiàn)將程序中用到的圖片保存到項(xiàng)目debug目錄下,運(yùn)行程序,效果如圖。QT5開(kāi)發(fā)及實(shí)例(第5版)第5章Qt

5主窗口及實(shí)例——Qt5文件操作功能01新建文件新建文件在圖中,當(dāng)單擊“文件”→“新建”命令時(shí),沒(méi)有任何反應(yīng)。下面將介紹如何實(shí)現(xiàn)新建一個(gè)空白文件的功能。新建文件(1)打開(kāi)imgprocessor.h頭文件,添加“protectedslots:”變量:protectedslots:voidShowNewFile();(2)在createActions()函數(shù)的“"新建"動(dòng)作”最后添加事件關(guān)聯(lián):connect(NewFileAction,SIGNAL(triggered()),this,SLOT(ShowNewFile()));(3)實(shí)現(xiàn)新建文件功能的函數(shù)ShowNewFile()如下:voidImgProcessor::ShowNewFile(){ImgProcessor*newImgProcessor=newImgProcessor;newImgProcessor->show();}新建文件(4)運(yùn)行程序,單擊“文件”→“新建”命令或單擊工具欄上的按鈕,彈出新的文件編輯窗口,如圖。02打開(kāi)文件打開(kāi)文件利用標(biāo)準(zhǔn)文件對(duì)話框QFileDialog打開(kāi)一個(gè)已經(jīng)存在的文件。若當(dāng)前中央窗體中已有打開(kāi)的文件,則在一個(gè)新的窗口中打開(kāi)選定的文件;若當(dāng)前中央窗體是空白的,則在當(dāng)前中央窗體中打開(kāi)。(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowOpenFile();(2)在createActions()函數(shù)的“"打開(kāi)"動(dòng)作”最后添加事件關(guān)聯(lián):connect(openFileAction,SIGNAL(triggered()),this,SLOT(ShowOpenFile()));打開(kāi)文件(3)實(shí)現(xiàn)打開(kāi)文件功能的函數(shù)ShowOpenFile()如下:voidImgProcessor::ShowOpenFile(){fileName=QFileDialog::getOpenFileName(this);if(!fileName.isEmpty()){if(showWidget->text->document()->isEmpty()){loadFile(fileName);}else{ImgProcessor*newImgProcessor=newImgProcessor;newImgProcessor->show();newImgProcessor->loadFile(fileName);}}}打開(kāi)文件其中,loadFile()函數(shù)的實(shí)現(xiàn)如下,該函數(shù)利用QFile和QTextStream完成具體讀取文件內(nèi)容的工作:voidImgProcessor::loadFile(QStringfilename){printf("filename:%s\n",filename.data());QFilefile(filename);if(file.open(QIODevice::ReadOnly|QIODevice::Text)){QTextStreamtextStream(&file);while(!textStream.atEnd()){showWidget->text->append(textStream.readLine());printf("readline\n");}printf("end\n");}}打開(kāi)文件在此僅詳細(xì)說(shuō)明標(biāo)準(zhǔn)文件對(duì)話框QFileDialog的getOpenFileName()靜態(tài)函數(shù)各個(gè)參數(shù)的作用,其他文件對(duì)話框類(lèi)中相關(guān)的靜態(tài)函數(shù)的參數(shù)有與其類(lèi)似之處。QStringQFileDialog::getOpenFileName( QWidget*parent=0, //定義標(biāo)準(zhǔn)文件對(duì)話框的父窗口 constQString&caption=QString(), //定義標(biāo)準(zhǔn)文件對(duì)話框的標(biāo)題名 constQString&dir=QString(), //(a) constQString&filter=QString(), //(b) QString*selectedFilter=0, //用戶選擇過(guò)濾器通過(guò)此參數(shù)返回 Optionsoptions=0);打開(kāi)文件(4)在該源文件的開(kāi)始部分添加如下頭文件:#include<QFileDialog>#include<QFile>#include<QTextStream>(5)運(yùn)行程序,單擊“文件”→“打開(kāi)”命令或單擊工具欄上的按鈕,彈出“打開(kāi)”對(duì)話框,如圖。打開(kāi)文件選擇某個(gè)文件,單擊“打開(kāi)”按鈕,文本編輯框中將顯示出該文件的內(nèi)容,如圖。03打印文件1.文本打印2.圖像打印打印文件1.文本打印如圖所示,QPrintDialog標(biāo)準(zhǔn)打印對(duì)話框提供了打印機(jī)的選擇、配置功能,并允許用戶改變文檔有關(guān)的設(shè)置,如頁(yè)面范圍、打印份數(shù)等。打印文件具體實(shí)現(xiàn)步驟如下。(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowPrintText();(2)在createActions()函數(shù)的“"打印文本"動(dòng)作”最后添加事件關(guān)聯(lián):connect(PrintTextAction,SIGNAL(triggered()),this,SLOT(ShowPrintText()));(3)實(shí)現(xiàn)打印文本功能的函數(shù)ShowPrintText()如下:voidImgProcessor::ShowPrintText(){QPrinterprinter; //新建一個(gè)QPrinter對(duì)象QPrintDialogprintDialog(&printer,this); //(a)if(printDialog.exec()) //(b){ //獲得QTextEdit對(duì)象的文檔QTextDocument*doc=showWidget->text->document();doc->print(&printer); //打印}}打印文件(4)在該源文件的開(kāi)始部分添加如下頭文件:#include<QPrintDialog>#include<QPrinter>(5)運(yùn)行程序,單擊“文件”→“打印文本”命令或工具欄上的按鈕,彈出標(biāo)準(zhǔn)打印對(duì)話框。打印文件2.圖像打印打印圖像實(shí)際上是在一個(gè)QPaintDevice中畫(huà)圖,與平常在QWidget、QPixmap和QImage中畫(huà)圖相同,都是創(chuàng)建一個(gè)QPainter對(duì)象進(jìn)行畫(huà)圖,只是打印使用的是QPrinter,QPrinter本質(zhì)上也是一個(gè)繪圖設(shè)備QPaintDevice。下面將介紹如何實(shí)現(xiàn)圖像打印功能。(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowPrintImage();(2)在createActions()函數(shù)的“"打印圖像"動(dòng)作”最后添加事件關(guān)聯(lián):connect(PrintImageAction,SIGNAL(triggered()),this,SLOT(ShowPrintImage()));打印文件(3)實(shí)現(xiàn)打印圖像功能的函數(shù)ShowPrintImage()如下:voidImgProcessor::ShowPrintImage(){QPrinterprinter; //新建一個(gè)QPrinter對(duì)象QPrintDialogprintDialog(&printer,this); //(a)if(printDialog.exec()) //(b){QPainterpainter(&printer); //(c)QRectrect=painter.viewport(); //獲得QPainter對(duì)象的視圖矩形區(qū)域QSizesize=img.size(); //獲得圖像的大小 /*按照?qǐng)D形的比例大小重新設(shè)置視圖矩形區(qū)域*/size.scale(rect.size(),Qt::KeepAspectRatio);painter.setViewport(rect.x(),rect.y(),size.width(),size.height());painter.setWindow(img.rect()); //設(shè)置QPainter窗口大小為圖像的大小painter.drawImage(0,0,img); //打印圖像}}打印文件(4)在該源文件的開(kāi)始部分添加如下頭文件:#include<QPainter>(5)運(yùn)行程序,單擊“文件”→“打印圖像”命令或單擊工具欄上的按鈕,彈出標(biāo)準(zhǔn)打印對(duì)話框,顯示效果如圖。QT5開(kāi)發(fā)及實(shí)例(第5版)第5章Qt

5主窗口及實(shí)例——Qt5圖像坐標(biāo)變換01縮放功能縮放功能(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowZoomIn();(2)在createActions()函數(shù)的“"放大"動(dòng)作”最后添加事件關(guān)聯(lián):connect(zoomInAction,SIGNAL(triggered()),this,SLOT(ShowZoomIn()));(3)實(shí)現(xiàn)圖形放大功能的函數(shù)ShowZoomIn()如下:voidImgProcessor::ShowZoomIn(){if(img.isNull()) //有效性判斷return;QMatrixmatrix; //聲明一個(gè)QMatrix類(lèi)的實(shí)例matrix.scale(2,2); //(a)img=img.transformed(matrix);//重新設(shè)置顯示圖形showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}縮放功能(4)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowZoomOut();(5)在createActions()函數(shù)的“"縮小"動(dòng)作”最后添加事件關(guān)聯(lián):connect(zoomOutAction,SIGNAL(triggered()),this,SLOT(ShowZoomOut()));(6)實(shí)現(xiàn)圖形縮小功能的函數(shù)ShowZoomOut()如下:voidImgProcessor::ShowZoomOut(){if(img.isNull())return;QMatrixmatrix;matrix.scale(0.5,0.5); //(a)img=img.transformed(matrix);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}縮放功能(7)運(yùn)行程序,單擊“編輯”→“放大”命令或單擊工具欄上的按鈕,圖像放大效果如圖。02旋轉(zhuǎn)功能旋轉(zhuǎn)功能ShowRotate90()函數(shù)實(shí)現(xiàn)的是圖形的旋轉(zhuǎn),此函數(shù)實(shí)現(xiàn)坐標(biāo)的逆時(shí)針旋轉(zhuǎn)90°。具體實(shí)現(xiàn)步驟如下。(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowRotate90();(2)在createActions()函數(shù)的“旋轉(zhuǎn)90°”最后添加事件關(guān)聯(lián):connect(rotate90Action,SIGNAL(triggered()),this,SLOT(ShowRotate90()));(3)ShowRotate90()函數(shù)的具體實(shí)現(xiàn)代碼如下:voidImgProcessor::ShowRotate90(){if(img.isNull())return;QMatrixmatrix;matrix.rotate(90);img=img.transformed(matrix);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}旋轉(zhuǎn)功能(4)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowRotate180();voidShowRotate270();(5)在createActions()函數(shù)的“旋轉(zhuǎn)180°”“旋轉(zhuǎn)270°”最后分別添加事件關(guān)聯(lián):connect(rotate180Action,SIGNAL(triggered()),this,SLOT(ShowRotate180()));connect(rotate270Action,SIGNAL(triggered()),this,SLOT(ShowRotate270()));旋轉(zhuǎn)功能(6)ShowRotate180()、ShowRotate270()函數(shù)的具體實(shí)現(xiàn)代碼如下:voidImgProcessor::ShowRotate180(){if(img.isNull())return;QMatrixmatrix;matrix.rotate(180);img=img.transformed(matrix);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}voidImgProcessor::ShowRotate270(){if(img.isNull())return;QMatrixmatrix;matrix.rotate(270);img=img.transformed(matrix);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}旋轉(zhuǎn)功能(7)運(yùn)行程序,單擊“旋轉(zhuǎn)”→“旋轉(zhuǎn)90°”命令或單擊工具欄上的按鈕,圖像旋轉(zhuǎn)90°的效果如圖。03鏡像功能鏡像功能ShowMirrorVertical()函數(shù)實(shí)現(xiàn)的是圖形的縱向鏡像,ShowMirrorHorizontal()函數(shù)實(shí)現(xiàn)的則是橫向鏡像。通過(guò)QImage::mirrored(boolhorizontal,boolvertical)實(shí)現(xiàn)圖形的鏡像功能,參數(shù)horizontal和vertical分別指定了鏡像的方向。具體實(shí)現(xiàn)步驟如下。(1)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowMirrorVertical();voidShowMirrorHorizontal();(2)在createActions()函數(shù)的“縱向鏡像”“橫向鏡像”最后分別添加事件關(guān)聯(lián):connect(mirrorVerticalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorVertical()));connect(mirrorHorizontalAction,SIGNAL(triggered()),this,SLOT(ShowMirrorHorizontal()));鏡像功能(3)ShowMirrorVertical()、ShowMirrorHorizontal()函數(shù)的具體實(shí)現(xiàn)代碼如下:voidImgProcessor::ShowMirrorVertical(){if(img.isNull())return;img=img.mirrored(false,true);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}voidImgProcessor::ShowMirrorHorizontal(){if(img.isNull())return;img=img.mirrored(true,false);showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));}鏡像功能(4)此時(shí)運(yùn)行程序,單擊“鏡像”→“橫向鏡像”命令,蝴蝶翅膀底部的陰影從右邊移到左邊,橫向鏡像效果如圖。QT5開(kāi)發(fā)及實(shí)例(第5版)第5章Qt

5主窗口及實(shí)例——Qt5文本編輯功能Qt5文本編輯功能在編寫(xiě)包含格式設(shè)置的文本編輯程序時(shí),經(jīng)常用到的Qt類(lèi)有QTextEdit、QTextDocument、QTextBlock、QTextList、QTextFrame、QTextTable、QTextCharFormat、QTextBlockFormat、QTextListFormat、QTextFrameFormat和QTextTableFormat等。文本編輯各類(lèi)之間的劃分與關(guān)系如圖。Qt5文本編輯功能實(shí)現(xiàn)文本編輯的具體操作步驟如下。(1)在imgprocessor.h頭文件中添加“private:”變量:QLabel*fontLabel1; //字體設(shè)置項(xiàng)QFontComboBox*fontComboBox;QLabel*fontLabel2;QComboBox*sizeComboBox;QToolButton*boldBtn;QToolButton*italicBtn;QToolButton*underlineBtn;QToolButton*colorBtn;QToolBar*fontToolBar; //字體工具欄Qt5文本編輯功能(2)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowFontComboBox(QStringcomboStr);voidShowSizeSpinBox(QStringspinValue);voidShowBoldBtn();voidShowItalicBtn();voidShowUnderlineBtn();voidShowColorBtn();voidShowCurrentFormatChanged(constQTextCharFormat&fmt);(3)在相對(duì)應(yīng)的構(gòu)造函數(shù)中,在語(yǔ)句“setCentralWidget(showWidget);”與語(yǔ)句“createActions();”之間添加如下代碼。Qt5文本編輯功能(4)在該構(gòu)造函數(shù)的最后部分添加相關(guān)的事件關(guān)聯(lián):connect(fontComboBox,SIGNAL(activated(QString)),this,SLOT(ShowFontComboBox(QString)));connect(sizeComboBox,SIGNAL(activated(QString)),this,SLOT(ShowSizeSpinBox(QString)));connect(boldBtn,SIGNAL(clicked()),this,SLOT(ShowBoldBtn()));connect(italicBtn,SIGNAL(clicked()),this,SLOT(ShowItalicBtn()));connect(underlineBtn,SIGNAL(clicked()),this,SLOT(ShowUnderlineBtn()));connect(colorBtn,SIGNAL(clicked()),this,SLOT(ShowColorBtn()));connect(showWidget->text,SIGNAL(currentCharFormatChanged(QTextCharFormat&)),this,SLOT(ShowCurrentFormatChanged(QTextCharFormat&)));Qt5文本編輯功能(5)在相對(duì)應(yīng)的工具欄createToolBars()函數(shù)中添加如下代碼://字體工具條fontToolBar=addToolBar("Font");fontToolBar->addWidget(fontLabel1);fontToolBar->addWidget(fontComboBox);fontToolBar->addWidget(fontLabel2);fontToolBar->addWidget(sizeComboBox);fontToolBar->addSeparator();fontToolBar->addWidget(boldBtn);fontToolBar->addWidget(italicBtn);fontToolBar->addWidget(underlineBtn);fontToolBar->addSeparator();fontToolBar->addWidget(colorBtn);調(diào)用QFontComboBox的setFontFilters接口可過(guò)濾只在下拉列表框中顯示某一類(lèi)字體,默認(rèn)情況下為QFontComboBox::AllFonts列出所有字體。01設(shè)置字體設(shè)置字體完成設(shè)置選定文字字體的函數(shù)ShowFontComboBox()代碼如下:voidImgProcessor::ShowFontComboBox(QStringcomboStr) //設(shè)置字體{QTextCharFormatfmt; //創(chuàng)建一個(gè)QTextCharFormat對(duì)象fmt.setFontFamily(comboStr); //選擇的字體名稱(chēng)設(shè)置給QTextCharFormat對(duì)象mergeFormat(fmt); //將新的格式應(yīng)用到光標(biāo)選區(qū)內(nèi)的字符}所有對(duì)于QTextDocument進(jìn)行的修改都通過(guò)QTextCursor類(lèi)來(lái)完成,具體代碼如下:voidImgProcessor::mergeFormat(QTextCharFormatformat){QTextCursorcursor=showWidget->text->textCursor(); //獲得編輯框中的光標(biāo)if(!cursor.hasSelection()) //(a)cursor.select(QTextCursor::WordUnderCursor);cursor.mergeCharFormat(format); //(b)showWidget->text->mergeCurrentCharFormat(format); //(c)}02設(shè)置字號(hào)設(shè)置字號(hào)設(shè)置選定文字字號(hào)大小的ShowSizeSpinBox()函數(shù)代碼如下:voidImgProcessor::ShowSizeSpinBox(QStringspinValue) //設(shè)置字號(hào){QTextCharFormatfmt;fmt.setFontPointSize(spinValue.toFloat());showWidget->text->mergeCurrentCharFormat(fmt);}03設(shè)置文字加粗設(shè)置文字加粗設(shè)置選定文字為加粗顯示的ShowBoldBtn()函數(shù)代碼如下:voidImgProcessor::ShowBoldBtn() //設(shè)置文字顯示加粗{QTextCharFormatfmt;fmt.setFontWeight(boldBtn->isChecked()?QFont::Bold:QFont::Normal);showWidget->text->mergeCurrentCharFormat(fmt);}其中,調(diào)用QTextCharFormat的setFontWeight()函數(shù)設(shè)置粗細(xì)值,若檢測(cè)到“加粗”按鈕被按下,則設(shè)置字符的Weight值為QFont::Bold,可直接設(shè)為75;反之,則設(shè)為QFont::Normal。04設(shè)置文字斜體設(shè)置文字斜體設(shè)置選定文字為斜體顯示的ShowItalicBtn()函數(shù)代碼如下:voidImgProcessor::ShowItalicBtn() //設(shè)置文字顯示斜體{QTextCharFormatfmt;fmt.setFontItalic(italicBtn->isChecked());showWidget->text->mergeCurrentCharFormat(fmt);}05設(shè)置文字加下畫(huà)線設(shè)置文字加下畫(huà)線在選定文字下方加下畫(huà)線的ShowUnderlineBtn()函數(shù)代碼如下:voidImgProcessor::ShowUnderlineBtn() //設(shè)置文字加下畫(huà)線{QTextCharFormatfmt;fmt.setFontUnderline(underlineBtn->isChecked());showWidget->text->mergeCurrentCharFormat(fmt);}06設(shè)置文字顏色設(shè)置文字顏色設(shè)置選定文字顏色的ShowColorBtn()函數(shù)代碼如下:voidImgProcessor::ShowColorBtn() //設(shè)置文字顏色{ QColorcolor=QColorDialog::getColor(Qt::red,this); //(a) if(color.isValid()){ QTextCharFormatfmt; fmt.setForeground(color); showWidget->text->mergeCurrentCharFormat(fmt);}}在imgprocessor.cpp文件的開(kāi)頭添加聲明:#include<QColorDialog>#include<QColor>設(shè)置文字顏色標(biāo)準(zhǔn)顏色對(duì)話框QColorDialog類(lèi)的使用:QColorgetColor(constQColor&initial=Qt::white,QWidget*parent=0);第1個(gè)參數(shù)指定了選中的顏色,默認(rèn)為白色。第2個(gè)參數(shù)定義了標(biāo)準(zhǔn)顏色對(duì)話框的父窗口。07設(shè)置字符格式設(shè)置字符格式當(dāng)光標(biāo)所在處的字符格式發(fā)生變化時(shí)調(diào)用此槽函數(shù),函數(shù)根據(jù)新的字符格式將工具欄上各個(gè)格式控件的顯示更新。voidImgProcessor::ShowCurrentFormatChanged(constQTextCharFormat&fmt){ fontComboBox->setCurrentIndex(fontComboBox->findText(fmt.fontFamily())); sizeComboBox->setCurrentIndex(sizeComboBox->findText(QString::number(fmt.fontPointSize()))); boldBtn->setChecked(fmt.font().bold()); italicBtn->setChecked(fmt.fontItalic()); underlineBtn->setChecked(fmt.fontUnderline());}QT5開(kāi)發(fā)及實(shí)例(第5版)第5章Qt

5主窗口及實(shí)例——Qt5排版功能Qt5排版功能具體實(shí)現(xiàn)步驟如下。(1)在imgprocessor.h頭文件中添加“private:”變量:QLabel*listLabel; //排序設(shè)置項(xiàng)QComboBox*listComboBox;QActionGroup*actGrp;QAction*leftAction;QAction*rightAction;QAction*centerAction;QAction*justifyAction;QToolBar*listToolBar; //排序工具欄(2)在imgprocessor.h頭文件中添加“protectedslots:”變量:voidShowList(int);voidShowAlignment(QAction*act);voidShowCursorPositionChanged();Qt5排版功能(3)在相對(duì)應(yīng)的構(gòu)造函數(shù)中,在語(yǔ)句“setCentralWidget(showWidget);”與語(yǔ)句“createActions();”之間添加如下代碼://排序listLabel=newQLabel(tr("排序"));listComboBox=newQComboBox;listComboBox->addItem("Standard");listComboBox->addItem("QTextListFormat::ListDisc");listComboBox->addItem("QTextListFormat::ListCircle");listComboBox->addItem("QTextListFormat::ListSquare");listComboBox->addItem("QTextListFormat::ListDecimal");listComboBox->addItem("QTextListFormat::ListLowerAlpha");listComboBox->addItem("QTextListFormat::ListUpperAlpha");listComboBox->addItem("QTextListFormat::ListLowerRoman");listComboBox->addItem("QTextListFormat::ListUpperRoman");(4)在構(gòu)造函數(shù)的最后添加相關(guān)的事件關(guān)聯(lián):connect(listComboBox,SIGNAL(activated(int)),this,SLOT(ShowList(int)));connect(showWidget->text->document(),SIGNAL(undoAvailable(bool)),redoAction,SLOT(setEnabled(bool)));connect(showWidget->text->document(),SIGNAL(redoAvailable(bool)),redoAction,SLOT(setEnabled(bool)));connect(showWidget->text,SIGNAL(cursorPositionChanged()),this,SLOT(ShowCursorPositionChanged()));Qt5排版功能(5)在相對(duì)應(yīng)的工具欄createActions()函數(shù)中添加如下代碼://排序:左對(duì)齊、右對(duì)齊、居中和兩端對(duì)齊actGrp=newQActionGroup(this);leftAction=newQAction(QIcon("left.png"),"左對(duì)齊",actGrp);leftAction->setCheckable(true);rightAction=newQAction(QIcon("right.png"),"右對(duì)齊",actGrp);rightAction->setCheckable(true);centerAction=newQAction(QIcon("center.png"),"居中",actGrp);centerAction->setCheckable(true);justifyAction=newQAction(QIcon("justify.png"),"兩端對(duì)齊",actGrp);justifyAction->setCheckable(true);connect(actGrp,SIGNAL(triggered(QAction*)),t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論