版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> QT課程設(shè)計(jì)</b></p><p> 題 目 制作畫(huà)圖工具 </p><p> 學(xué)生姓名 </p><p> 專(zhuān)業(yè)班級(jí) </p><p> 學(xué) 號(hào) </p><p&
2、gt; 所 在 系 </p><p> 指導(dǎo)教師 </p><p> 完成時(shí)間 年 月日 </p><p><b> 目 錄</b></p><p> 1概述………………………………………………………………………………1</p>
3、<p> 1.1 項(xiàng)目名稱(chēng)…………………………………………………………………1</p><p> 1.2 畫(huà)圖工具基本框架……………………………………………………1</p><p> 1.3 畫(huà)圖工具功能介紹……………………………………………………2</p><p> 1.3.1菜單…………………………………………………………………2</
4、p><p> 1.3.2線(xiàn)型選擇……………………………………………………………3</p><p> 1.3.3畫(huà)筆寬度……………………………………………………………3</p><p> 1.3.4畫(huà)筆顏色……………………………………………………………3</p><p> 1.3.5清空畫(huà)板……………………………………………………………3&
5、lt;/p><p> 1.3.6繪制圖形……………………………………………………………3</p><p> 1.3.7橡皮擦………………………………………………………………3</p><p> 1.3.8坐標(biāo)定位……………………………………………………………3</p><p> 1.4 制作畫(huà)圖工具使用的編程語(yǔ)言…………………………………
6、…4</p><p> 1.5 編譯環(huán)境………………………………………………………………4</p><p> 1.6 使用QT編程語(yǔ)言制作畫(huà)圖工具的優(yōu)勢(shì)………………………4</p><p> 1.7 項(xiàng)目制作過(guò)程中應(yīng)用到的QT知識(shí)………………………………4</p><p> 1.7.1信號(hào)與槽………………………………………………………
7、……4</p><p> 1.7.2對(duì)話(huà)框………………………………………………………………4</p><p> 1.7.3創(chuàng)建主窗口…………………………………………………………4</p><p> 1.7.4自定義窗口部件……………………………………………………4</p><p> 1.7.5布局管理……………………………………………
8、………………5</p><p> 1.7.6 QT中的事件機(jī)制……………………………………………………5</p><p> 1.7.7二維圖形的繪制……………………………………………………5</p><p> 1.8 項(xiàng)目中建立的類(lèi)…………………………………………………………5</p><p> 1.9 類(lèi)之間的相互關(guān)系…………………
9、……………………………………5</p><p> 2 總體設(shè)計(jì)…………………………………………………………………………6</p><p> 2.1 主窗口……………………………………………………………………6</p><p> 2.1.1創(chuàng)建主窗口…………………………………………………………6</p><p> 2.1.2添加菜單……
10、………………………………………………………6</p><p> 2.1.3添加子菜單…………………………………………………………6</p><p> 2.1.4創(chuàng)建狀態(tài)欄…………………………………………………………7</p><p> 2.2 懸浮窗……………………………………………………………………7</p><p> 2.2.1線(xiàn)
11、型選項(xiàng)……………………………………………………………7</p><p> 2.2.2畫(huà)筆寬度調(diào)節(jié)………………………………………………………8</p><p> 2.1.3畫(huà)筆顏色選擇………………………………………………………8</p><p> 2.2.4清空畫(huà)板……………………………………………………………9</p><p> 2.
12、2.5繪制圖形……………………………………………………………9</p><p> 2.2.6橡皮擦……………………………………………………………9</p><p> 2.3 畫(huà)板………………………………………………………………………10</p><p> 2.3.1畫(huà)布的創(chuàng)建…………………………………………………………10</p><p&g
13、t; 2.3.2畫(huà)布的顏色初始化…………………………………………………10</p><p> 2.3.3畫(huà)板大小……………………………………………………………10</p><p> 3 詳細(xì)設(shè)計(jì)………………………………………………………………………10</p><p> 3.1 子菜單功能的實(shí)現(xiàn)……………………………………………………10</p>
14、<p> 3.1.1 New功能的實(shí)現(xiàn)……………………………………………………10</p><p> 3.1.2 Open 功能的實(shí)現(xiàn)…………………………………………………11</p><p> 3.1.3 Save 功能的實(shí)現(xiàn)…………………………………………………11</p><p> 3.1.4 SaveAs 功能的實(shí)現(xiàn)…………………………
15、……………………12</p><p> 3.2 懸浮窗內(nèi)各個(gè)功能的實(shí)現(xiàn)…………………………………………13</p><p> 3.2.1 Style功能的實(shí)現(xiàn)…………………………………………………13</p><p> 3.2.2 Width 功能的實(shí)現(xiàn)…………………………………………………14</p><p> 3.2.3 Colo
16、r 功能的實(shí)現(xiàn)…………………………………………………14</p><p> 3.2.4 Clear 功能的實(shí)現(xiàn)…………………………………………………16</p><p> 3.2.5 繪圖功能的實(shí)現(xiàn)…………………………………………………16</p><p> 3.2.6 eraser 功能的實(shí)現(xiàn)………………………………………………17</p>&
17、lt;p> 3.3 鼠標(biāo)形狀設(shè)置……………………………………17</p><p> 3.4 坐標(biāo)位置顯示功能的實(shí)現(xiàn)……………………17</p><p> 結(jié)束語(yǔ)………………………………………………………………………18</p><p> 致謝……………………………………………………………………19</p><p> 參考文獻(xiàn)…
18、………………………………………………………………20</p><p><b> 1 概述</b></p><p><b> 1.1 項(xiàng)目名稱(chēng)</b></p><p> 制作畫(huà)圖工具 </p><p> 1.2 畫(huà)圖工具基本框架</p><p><b>
19、 運(yùn)行結(jié)果如下圖:</b></p><p><b> 圖1.1</b></p><p><b> 圖1.2</b></p><p><b> 圖1.3</b></p><p><b> 圖1.4</b></p><
20、p> 1.3 畫(huà)圖工具功能介紹</p><p><b> 1.3.1 菜單</b></p><p><b> 圖1.2</b></p><p><b> File</b></p><p><b> New(新建)</b></p>
21、<p> Open(打開(kāi)一個(gè)圖片)</p><p><b> Save(保存)</b></p><p> SaveAs(另存為)</p><p><b> Exit(退出)</b></p><p><b> 圖1.3</b></p><
22、;p><b> Help</b></p><p> A.About(查看有關(guān)本工具的信息)</p><p> 1.3.2 線(xiàn)型選擇</p><p><b> Solidline</b></p><p><b> Dotline</b></p>&l
23、t;p><b> Dashline</b></p><p> 1.3.3 畫(huà)筆寬度</p><p> Width:可手動(dòng)調(diào)節(jié)畫(huà)筆寬度</p><p> 1.3.4 畫(huà)筆顏色</p><p> Color:可手動(dòng)選擇畫(huà)筆顏色</p><p> 1.3.5 清空畫(huà)板</p>
24、;<p> Clear:手動(dòng)清空整個(gè)畫(huà)板</p><p> 1.3.6 繪制圖形</p><p> 矩形rectangle</p><p> 圓角矩形roundrectangle</p><p> 橢圓ellipse(當(dāng)按著Shift鍵繪制時(shí)為圓形)</p><p><b> 弦ch
25、ord</b></p><p><b> 線(xiàn)line</b></p><p><b> 1.3.7 橡皮擦</b></p><p> Eraser:寬度可選</p><p> 1.3.8 坐標(biāo)定位</p><p> 狀態(tài)欄:可以顯示鼠標(biāo)所在位置坐標(biāo)(圖1
26、.4)狀態(tài)欄</p><p> 1.4 制作畫(huà)圖工具使用的編程語(yǔ)言</p><p> 基于Linux的嵌入式QT</p><p><b> 1.5 編譯環(huán)境</b></p><p> Qt Creator</p><p> 1.6使用QT編程語(yǔ)言制作畫(huà)圖工具的優(yōu)勢(shì)</p>
27、<p> QT具有可以讓編程人員靈活運(yùn)用而且獨(dú)特于其他編程語(yǔ)言的信號(hào)—槽機(jī)制,尤其是在本項(xiàng)目制作過(guò)程當(dāng)中遇到的一些棘手問(wèn)題,當(dāng)我們使用信號(hào)—槽機(jī)制來(lái)解決的時(shí)候,很容易發(fā)現(xiàn),那些原本復(fù)雜的問(wèn)題將變得如此簡(jiǎn)單。</p><p> 1.7 項(xiàng)目制作過(guò)程中應(yīng)用到的QT知識(shí)</p><p> 1.7.1 信號(hào)與槽</p><p><b> 信號(hào)與槽
28、的定義</b></p><p><b> 信號(hào)與槽的關(guān)聯(lián)</b></p><p><b> 需要注意的問(wèn)題</b></p><p><b> 1.7.2 對(duì)話(huà)框</b></p><p><b> Qt消息框</b></p>
29、<p> 1.7.3 創(chuàng)建主窗口</p><p> QMain Window 類(lèi)</p><p> 創(chuàng)建主窗口的方法和流程</p><p><b> 菜單和子菜單的創(chuàng)建</b></p><p> 1.7.4 自定義窗口部件</p><p><b> QWidget
30、類(lèi)</b></p><p> 從QWidget中派生</p><p> 1.7.5 布局管理</p><p><b> 垂直布局</b></p><p><b> 水平布局</b></p><p><b> 網(wǎng)格布局</b><
31、/p><p> 1.7.6 QT中的事件機(jī)制</p><p><b> 鼠標(biāo)事件</b></p><p><b> 鍵盤(pán)事件</b></p><p> 1.7.7 二維圖形的繪制</p><p> QPainter類(lèi)的應(yīng)用</p><p><
32、;b> 圖像的裝載</b></p><p><b> 圖像的保存</b></p><p><b> 坐標(biāo)變換</b></p><p><b> QImage類(lèi)應(yīng)用</b></p><p><b> QT打印圖形</b></
33、p><p> 1.8 項(xiàng)目中建立的類(lèi)</p><p> Controlbox類(lèi)</p><p> Drawwidget類(lèi)</p><p> MainWindow類(lèi)</p><p> 1.9 類(lèi)之間的相互關(guān)系</p><p> Controlbox類(lèi):創(chuàng)建懸浮窗內(nèi)的各個(gè)控件(線(xiàn)寬、畫(huà)筆顏色
34、、清空等等)</p><p> Drawwidget類(lèi):創(chuàng)建畫(huà)板</p><p> MainWindow類(lèi):主窗口</p><p> 主窗口調(diào)用Controlbox類(lèi)和Drawwidget類(lèi)設(shè)定整個(gè)畫(huà)圖工具的外部框架。</p><p> 運(yùn)用信號(hào)-槽機(jī)制關(guān)聯(lián)Controlbox類(lèi)和Drawwidget類(lèi)中的函數(shù)以及MainWindow
35、類(lèi)和Controlbox類(lèi)中的函數(shù)。</p><p><b> 事件機(jī)制的實(shí)現(xiàn)</b></p><p><b> 2 總體設(shè)計(jì)</b></p><p><b> 2.1 主窗口</b></p><p> 2.1.1創(chuàng)建主窗口</p><p>
36、一般情況下,建立一個(gè)QT工程必須要有一個(gè)主窗口,而且僅有一個(gè)主窗口,所有需要實(shí)現(xiàn)的功能,在交互界面中必須在此窗口的基礎(chǔ)上來(lái)實(shí)現(xiàn),這樣才使得整個(gè)工程的建立得以實(shí)現(xiàn)其自身價(jià)值。</p><p> 一個(gè)最簡(jiǎn)單的主窗口,沒(méi)有菜單欄,沒(méi)有工具欄,沒(méi)有狀態(tài)欄。在此我們首先創(chuàng)建一個(gè)最簡(jiǎn)單的主窗口。</p><p> 2.1.2 添加菜單</p><p> 僅僅創(chuàng)建一個(gè)最簡(jiǎn)單
37、的主窗口除了它所存在的基本框架以外沒(méi)有任何其他的意義,所以要想實(shí)現(xiàn)畫(huà)圖工具所有的功能,接下來(lái)就要為主窗口添加菜單項(xiàng),這是為下一步的循序漸進(jìn)做鋪墊。</p><p> 添加兩個(gè)菜單項(xiàng):1.File 2.Help</p><p> File是文件菜單,任何一個(gè)關(guān)于事物的操作無(wú)非都是面向文件,所以文件菜單是一個(gè)必不可少的菜單項(xiàng)。</p><p> fileMenu=
38、menuBar()->addMenu(tr("&File"));</p><p> Help菜單項(xiàng)是關(guān)于軟件版本的相關(guān)信息。</p><p> helpMenu=menuBar()->addMenu(tr("&help"));</p><p> 2.1.3 添加子菜單</p>&
39、lt;p> 單單添加菜單項(xiàng)是無(wú)法完成任何操作的,在QT里面,每一個(gè)事件的完成要么是依靠信號(hào)-槽機(jī)制進(jìn)行關(guān)聯(lián),要么是通過(guò)事件機(jī)制來(lái)連接。在這里,我們首先添加子菜單,以方便之后借著信號(hào)-槽機(jī)制實(shí)現(xiàn)相應(yīng)的功能。</p><p><b> 添加五個(gè)子菜單:</b></p><p><b> New</b></p><p&g
40、t; newAct=newQAction(QIcon(":/new/prefix1/image/new.PNG"),tr("&New"),this);</p><p><b> Open</b></p><p> openAct=newQAction(QIcon(":/images/open.png&qu
41、ot;),tr("&Open..."),this);</p><p><b> Save </b></p><p> saveAct=newQAction(QIcon(":/new/prefix1/image/save.PNG"),tr("&Save"),this);</p>
42、<p><b> SaveAs</b></p><p> saveAsAct=newQAction(tr("Save&As..."),this);</p><p><b> Exit</b></p><p> exitAct=newQAction(tr("E&
43、;xit"),this);</p><p> 2.1.4 創(chuàng)建狀態(tài)欄</p><p> 狀態(tài)欄是為了顯示用戶(hù)當(dāng)前操作時(shí)的信息,使機(jī)器更加人性化。</p><p> void MainWindow::setMousePosDisplay(int x, int y)</p><p><b> {</b>&l
44、t;/p><p> QString str = "(" + QString::number(x) + "," +QString::number(y) + ")";</p><p> statusBar()->showMessage(str);</p><p><b> }</b>
45、;</p><p><b> 2.2 懸浮窗</b></p><p> 懸浮窗只是一個(gè)外部的架構(gòu),只有通過(guò)信號(hào)-槽機(jī)制將控件與槽函數(shù)相關(guān)聯(lián)才能夠達(dá)到真正的目的。</p><p> 2.2.1 線(xiàn)型選項(xiàng)</p><p> Style:是一個(gè)標(biāo)簽,用于表明右邊的ComboBox是一個(gè)關(guān)于線(xiàn)型選擇的組合框。</p
46、><p> ComboBox里添加有子項(xiàng),各種線(xiàn)型,比如Solidline 、Dotline、Dashline等等。只需要手動(dòng)選擇其中的一個(gè)類(lèi)型即可實(shí)現(xiàn)一種不同線(xiàn)型繪制圖形。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> styleLabel=newQLabel("style");</p>
47、<p> gridLayout->addWidget(styleLabel,0,0); </p><p> styleComboBox=newQComboBox; styleComboBox->addItem(tr("SolidLine"),static_cast<int>(Qt::SolidLine)); styleCom
48、boBox->addItem("DashLine",static_cast<int>(Qt::DashLine)); styleComboBox->addItem("DotLine",static_cast<int>(Qt::DotLine)); styleComboBox->addItem("DashDotLine"
49、,static_cast<int>(Qt::DashDotLine)); styleComboBox->addItem("DashDotDotLine",static_cast<int>(Qt::DashDotDotLine));</p><p> gridLayout->addWidget(styleComboBox,0,1,1,2);<
50、;/p><p> 2.2.2 畫(huà)筆寬度調(diào)節(jié)</p><p> Width是一個(gè)標(biāo)簽,用于表明它的右邊是一個(gè)關(guān)于線(xiàn)寬調(diào)節(jié)的QSpinBox。可以通過(guò)點(diǎn)擊QSpinBox上下箭來(lái)實(shí)現(xiàn)畫(huà)筆寬度的調(diào)節(jié)。</p><p><b> 代碼實(shí)現(xiàn)如下:</b></p><p> widthLabel = new QLabel(&qu
51、ot;Width");</p><p> widthSpinBox = new QSpinBox;</p><p> widthSpinBox->setValue(1);</p><p> gridLayout->addWidget(widthLabel,1,0);</p><p> gridLayout->
52、;addWidget(widthSpinBox,1,1,1,2);</p><p> 2.2.3 畫(huà)筆顏色選擇</p><p><b> 圖2.1</b></p><p> 通過(guò)單擊Color右側(cè)的快速存取按鈕彈出圖2.1對(duì)話(huà)框,選擇其中的顏色之后,單擊OK即可選擇有效畫(huà)筆顏色。</p><p><b>
53、 實(shí)現(xiàn)代碼:</b></p><p> colorBtn = new QToolButton;</p><p> QPixmap pixmap(20,20);</p><p> pixmap.fill(Qt::black);</p><p> colorBtn->setIcon(QIcon(pixmap));<
54、;/p><p> gridLayout->addWidget(colorBtn,2,1);</p><p> 2.2.4 清空畫(huà)板</p><p> 單擊Clear按鈕即可清除畫(huà)板上的所有內(nèi)容。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> clearBtn =
55、new QToolButton();</p><p> clearBtn->setText("clear");</p><p> gridLayout->addWidget(clearBtn,3,0);</p><p> 2.2.5 繪制圖形</p><p> 接下來(lái)是五個(gè)按鈕,單擊其中一個(gè)即可選擇你想
56、要繪制的基本圖形,比如矩形、橢圓、直線(xiàn)等等。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> rectangle=new QPushButton(QIcon(":/new/prefix1/image/qpainter-rectangle.png"),tr("rectangle"),0);</p>
57、;<p> roundrect=new QPushButton(QIcon(":/new/prefix1/image/qpainter-roundrect.png"),tr("roundrect"),0);</p><p> ellipse=new QPushButton(QIcon(":/new/prefix1/image/qpainter-e
58、llipse.png"),tr("ellipse "),0);</p><p> chord=new QPushButton(QIcon(":/new/prefix1/image/qpainter-chord.png"),tr("chord "),0);</p><p> line=newQPushButto
59、n(QIcon(":/new/prefix1/image/Line(2).png"),tr("line "),0);</p><p><b> 2.2.6 橡皮擦</b></p><p> 想要去除某些冗余部分時(shí)可以單擊選擇橡皮擦對(duì)冗余部分進(jìn)行擦除。</p><p><b> 實(shí)現(xiàn)
60、代碼如下:</b></p><p> erasor=newQPushButton(QIcon(":/new/prefix1/image/cursor_erasor.png"),tr("eraser "),0);</p><p> gridLayout->addWidget(erasor,10,0);</p><
61、;p><b> 2.3 畫(huà)板</b></p><p> 2.3.1 畫(huà)布的創(chuàng)建</p><p> 創(chuàng)建一張新的畫(huà)布,等待用戶(hù)繪制圖片。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> pix=newQPixmap(this->size());</p&g
62、t;<p> 2.3.2 畫(huà)布的顏色初始化</p><p> 初始化畫(huà)布的顏色,使它擁有一個(gè)初始背景顏色。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> pix->fill(Qt::white);</p><p> 2.3.3 畫(huà)板大小</p><p
63、> 初始化畫(huà)布的大小,使它能適合畫(huà)板控件。</p><p><b> 實(shí)現(xiàn)代碼如下:</b></p><p> pix=newQPixmap(this->size());</p><p> setMinimumSize(600,400);</p><p><b> 3 詳細(xì)設(shè)計(jì)</b
64、></p><p> 3.1子菜單功能的實(shí)現(xiàn)</p><p> 3.1.1 New功能的實(shí)現(xiàn)</p><p><b> 步驟如下:</b></p><p> 新建一個(gè)QAction,,并將此子菜單項(xiàng)命名為New</p><p> newAct=newQAction(QIcon(&q
65、uot;:/new/prefix1/image/new.PNG"),tr("&New"),this);</p><p> 添加快捷鍵:newAct->setShortcuts(QKeySequence::New); Ctrl+N</p><p> 當(dāng)鼠標(biāo)指向此子菜單項(xiàng)的時(shí)候,在狀態(tài)欄顯示信息為:Create a new file</p
66、><p> newAct->setStatusTip(tr("Createanewfile"));</p><p> 當(dāng)此子菜單項(xiàng)被觸發(fā)(單擊子菜單項(xiàng))的時(shí)候,激活newFile 槽函數(shù)。</p><p> connect(newAct,SIGNAL(triggered()),this,SLOT(newFile()));</p>
67、;<p> 在此應(yīng)用到信號(hào)-槽機(jī)制,這是QT里面極為重要的特色內(nèi)容,當(dāng)一個(gè)QAction被觸發(fā)的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用與此信號(hào)相關(guān)聯(lián)的槽函數(shù),newFile()是自定義的一個(gè)實(shí)現(xiàn)新建圖片文件的槽函數(shù)。</p><p> 將此QAction添加到File 菜單中:</p><p> fileMenu->addAction(newAct);</p><
68、;p> 3.1.2 Open 功能的實(shí)現(xiàn)</p><p><b> 步驟如下:</b></p><p> 新建一個(gè)QAction,,并將此子菜單項(xiàng)命名為Open</p><p> openAct=newQAction(QIcon(":/images/open.png"),tr("&Open..
69、."),this);添加快捷鍵:openAct->setShortcuts(QKeySequence::Open); Ctrl+O</p><p> 當(dāng)鼠標(biāo)指向此子菜單項(xiàng)的時(shí)候,在狀態(tài)欄顯示信息為:Open an existing file</p><p> openAct->setStatusTip(tr("Openanexistingfile&qu
70、ot;));</p><p> 當(dāng)此子菜單項(xiàng)被觸發(fā)(單擊子菜單項(xiàng))的時(shí)候,激活Open() 槽函數(shù)。</p><p> connect(openAct,SIGNAL(triggered()),this,SLOT(open()));</p><p> 在此應(yīng)用到信號(hào)-槽機(jī)制,這是QT里面極為重要的特色內(nèi)容,當(dāng)一個(gè)QAction被觸發(fā)的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用與此信號(hào)
71、相關(guān)聯(lián)的槽函數(shù),open()是自定義的一個(gè)實(shí)現(xiàn)打開(kāi)一個(gè)圖片文件的槽函數(shù)。</p><p> 將此QAction添加到File 菜單中:</p><p> fileMenu->addAction(openAct);</p><p> 3.1.3 Save 功能的實(shí)現(xiàn)</p><p><b> 步驟如下:</b>
72、;</p><p> 新建一個(gè)QAction,,并將此子菜單項(xiàng)命名為Save</p><p> saveAct=newQAction(QIcon(":/new/prefix1/image/save.PNG"),tr("&Save"),this);</p><p> 添加快捷鍵:saveAct->setSho
73、rtcuts(QKeySequence::Save);Ctrl+s</p><p> 當(dāng)鼠標(biāo)指向此子菜單項(xiàng)的時(shí)候,在狀態(tài)欄顯示信息為:</p><p> Save the document to disk</p><p> saveAct->setStatusTip(tr("Save the document to disk"));&
74、lt;/p><p> 當(dāng)此子菜單項(xiàng)被觸發(fā)(單擊子菜單項(xiàng))的時(shí)候,激活Save() 槽函數(shù)。</p><p> connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));</p><p> 在此應(yīng)用到信號(hào)-槽機(jī)制,這是QT里面極為重要的特色內(nèi)容,當(dāng)一個(gè)QAction被觸發(fā)的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用與此信號(hào)相關(guān)聯(lián)的
75、槽函數(shù),Save()是自定義的一個(gè)實(shí)現(xiàn)保存圖片文件的槽函數(shù)。</p><p> 將此QAction添加到File 菜單中:</p><p> fileMenu->addAction(saveAct);</p><p> 3.1.4 SaveAs 功能的實(shí)現(xiàn)</p><p><b> 步驟如下:</b><
76、;/p><p> 新建一個(gè)QAction,,并將此子菜單項(xiàng)命名為SaveAs</p><p> saveAsAct=newQAction(tr("Save&As..."),this);</p><p> 添加快捷鍵:saveAsAct->setShortcuts(QKeySequence::SaveAs);Ctrl+s+a<
77、/p><p> 當(dāng)鼠標(biāo)指向此子菜單項(xiàng)的時(shí)候,在狀態(tài)欄顯示信息為:</p><p> Save the document under a new name</p><p> saveAsAct->setStatusTip(tr("Save the document under a new name"));</p><p&
78、gt; 當(dāng)此子菜單項(xiàng)被觸發(fā)(單擊子菜單項(xiàng))的時(shí)候,激活saveAs() 槽函數(shù)。</p><p> connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));</p><p> 在此應(yīng)用到信號(hào)-槽機(jī)制,這是QT里面極為重要的特色內(nèi)容,當(dāng)一個(gè)QAction被觸發(fā)的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用與此信號(hào)相關(guān)聯(lián)的槽函數(shù),saveAs(
79、)是自定義的一個(gè)實(shí)現(xiàn)將圖片文件另存為一個(gè)新文件的槽函數(shù)。</p><p> 將此QAction添加到File 菜單中:</p><p> fileMenu->addAction(saveAsAct);</p><p> 3.1.5 Exit 功能的實(shí)現(xiàn)</p><p><b> 步驟如下:</b></
80、p><p> 新建一個(gè)QAction,,并將此子菜單項(xiàng)命名為Exit</p><p> exitAct=newQAction(tr("E&xit"),this);</p><p> 添加快捷鍵:exitAct->setShortcuts(QKeySequence::Quit);</p><p> 當(dāng)鼠標(biāo)指
81、向此子菜單項(xiàng)的時(shí)候,在狀態(tài)欄顯示信息為:</p><p> Exit the application</p><p> exitAct->setStatusTip(tr("Exit the application"));</p><p> 當(dāng)此子菜單項(xiàng)被觸發(fā)(單擊子菜單項(xiàng))的時(shí)候,激活close() 槽函數(shù)。</p>&
82、lt;p> connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));</p><p> 在此應(yīng)用到信號(hào)-槽機(jī)制,這是QT里面極為重要的特色內(nèi)容,當(dāng)一個(gè)QAction被觸發(fā)的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用與此信號(hào)相關(guān)聯(lián)的槽函數(shù),close()是系統(tǒng)內(nèi)部的一個(gè)實(shí)現(xiàn)關(guān)閉或者退出一個(gè)應(yīng)用程序的槽函數(shù)。</p><p> 將此QActi
83、on添加到File 菜單中:</p><p> fileMenu->addAction(exitAct);</p><p> 3.2 懸浮窗內(nèi)各個(gè)功能的實(shí)現(xiàn)</p><p> 3.2.1 Style功能的實(shí)現(xiàn)</p><p> 在組合框中添加線(xiàn)型:</p><p> styleComboBox->
84、addItem(tr("SolidLine"),static_cast<int>(Qt::SolidLine));</p><p> styleComboBox->addItem("DashLine",static_cast<int>(Qt::DashLine));</p><p> styleComboBox-&g
85、t;addItem("DotLine",static_cast<int>(Qt::DotLine));</p><p> styleComboBox->addItem("DashDotLine",static_cast<int>(Qt::DashDotLine));</p><p> styleComboBox-&g
86、t;addItem("DashDotDotLine",static_cast<int>(Qt::DashDotDotLine));</p><p> 這些線(xiàn)型都是QT 內(nèi)部自定義。</p><p><b> 關(guān)聯(lián)信號(hào)與槽</b></p><p> connect(controlBox->styleCo
87、mboBox,SIGNAL(activated(int)),this,SLOT(ShowStyle()));</p><p> 將組合框內(nèi)子項(xiàng)的觸發(fā)與主窗口類(lèi)中的ShowStyle()槽函數(shù)進(jìn)行關(guān)聯(lián)。單擊某個(gè)線(xiàn)型的時(shí)候就會(huì)自動(dòng)調(diào)用ShowStyle()槽函數(shù)。</p><p> ShowStyle()槽函數(shù)的實(shí)現(xiàn)內(nèi)容是:</p><p> void MainW
88、indow::ShowStyle()</p><p><b> {</b></p><p> drawArea->setStyle(controlBox->styleComboBox->itemData(</p><p> controlBox->styleComboBox->currentIndex(),Q
89、t::UserRole).toInt());</p><p> }即:給畫(huà)板的setStyle()函數(shù)傳遞一個(gè)線(xiàn)型參數(shù),下面為setStyle()函數(shù):</p><p> void DrawWidget::setStyle(int s)</p><p><b> {</b></p><p> style = s;
90、</p><p> }這樣style就獲得一個(gè)整型值。再通過(guò)執(zhí)行下面的這條語(yǔ)句就完成了畫(huà)筆線(xiàn)型的選擇:pen.setStyle((Qt::PenStyle)style);</p><p> 3.2.2 Width 功能的實(shí)現(xiàn)</p><p> 添加寬度框widthSpinBox:</p><p> widthSpinBox = new
91、 QSpinBox;</p><p> widthSpinBox->setValue(1);</p><p> 給了它一個(gè)默認(rèn)寬度。</p><p><b> 信號(hào)與槽關(guān)聯(lián)</b></p><p> connect(controlBox->widthSpinBox,SIGNAL(valueChange
92、d(int)),drawArea,SLOT(setWidth(int)));那么,當(dāng)widthSpinBox的值被改變的時(shí)候,將調(diào)用畫(huà)板的setWidth()方法,setWidth()方法內(nèi)容如下:</p><p> void DrawWidget::setWidth(int w)</p><p><b> {</b></p><p>
93、weight = w;</p><p><b> }</b></p><p> 這時(shí)便將widthSpinBox中的索引值作為參數(shù)傳遞給變量weight,再通過(guò)pen.setWidth(weight);這條語(yǔ)句的執(zhí)行就完成了畫(huà)筆寬度的調(diào)節(jié)。</p><p> 3.2.3 Color 功能的實(shí)現(xiàn)</p><p>
94、添加顏色colorBtn </p><p> colorBtn=new QToolButton;</p><p><b> 信號(hào)與槽關(guān)聯(lián)</b></p><p> connect(controlBox->colorBtn,SIGNAL(clicked()),this,SLOT(ShowColor()));</p>&l
95、t;p> 單擊colorBtn將調(diào)用主窗口類(lèi)的ShowColor(),ShowColor()槽函數(shù)內(nèi)容如下:</p><p> void MainWindow::ShowColor()</p><p><b> {</b></p><p> QColor = QColorDialog::getColor(Qt::black,th
96、is);</p><p> if(color.isValid())</p><p><b> {</b></p><p> drawArea->setColor(color);</p><p> QPixmap p(20,20);</p><p> p.fill(color);&l
97、t;/p><p> controlBox->colorBtn->setIcon(QIcon(p));</p><p><b> }</b></p><p><b> }</b></p><p> Color用于獲得用戶(hù)選擇的某種顏色值,畫(huà)板類(lèi)中的setColor(color):<
98、;/p><p> void DrawWidget::setColor(QColor c)</p><p><b> {</b></p><p> color = c;</p><p><b> }</b></p><p> 將顏色參數(shù)傳遞過(guò)來(lái),再執(zhí)行畫(huà)板類(lèi)中pen.se
99、tColor(color);語(yǔ)句,即完成畫(huà)筆顏色選擇。</p><p> 3.2.4 Clear 功能的實(shí)現(xiàn)</p><p> 添加clearBtn按鈕</p><p> clearBtn->setText("clear");</p><p><b> 信號(hào)與槽關(guān)聯(lián)</b></p&
100、gt;<p> connect(controlBox->clearBtn,SIGNAL(clicked()),drawArea,SLOT(clear()));</p><p> 在主窗口類(lèi)中將其關(guān)聯(lián),單擊clearBtn的時(shí)候,調(diào)用畫(huà)板類(lèi)中槽函數(shù)clear():</p><p> void DrawWidget::clear()</p><p&
101、gt;<b> {</b></p><p> pix->fill(Qt::white);</p><p> this->update();</p><p> }即可清除畫(huà)布上的所有內(nèi)容。</p><p> 3.2.5 繪圖功能的實(shí)現(xiàn)</p><p><b> 添加
102、各個(gè)按鈕</b></p><p> rectangle-line,逐個(gè)添加并且為它們布局。</p><p><b> 信號(hào)與槽相關(guān)聯(lián)</b></p><p> connect(controlBox->rectangle,SIGNAL(clicked()),drawArea,SLOT(drawrectangle()));&
103、lt;/p><p> connect(controlBox->roundrect,SIGNAL(clicked()),drawArea,SLOT(drawroundrect()));</p><p> connect(controlBox->ellipse,SIGNAL(clicked()),drawArea,SLOT(drawellipse()));</p>&
104、lt;p> connect(controlBox->chord,SIGNAL(clicked()),drawArea,SLOT(drawchord()));</p><p> connect(controlBox->line,SIGNAL(clicked()),drawArea,SLOT(drawline()));</p><p> 由上面的代碼可見(jiàn),其中任意一個(gè)按
105、鈕被單擊的時(shí)候?qū)?huì)調(diào)用與此按鈕信號(hào)相關(guān)聯(lián)的槽函數(shù),它們的繪圖方法都極為相似,我們拿drawrectangle()進(jìn)行解析:</p><p> void DrawWidget::drawrectangle()</p><p><b> {</b></p><p> shape=Rectangle;</p><p>
106、 this->setCursor(Qt::CrossCursor);</p><p> }其中shape 是枚舉類(lèi)型,這時(shí)通過(guò)判斷shape的值執(zhí)行相應(yīng)的繪圖語(yǔ)句,如果是Rectangle,則執(zhí)行繪制矩形語(yǔ)句。</p><p> 3.2.6 eraser 功能的實(shí)現(xiàn)</p><p> 添加eraser按鈕</p><p><
107、b> 信號(hào)與槽相關(guān)聯(lián)</b></p><p> connect(controlBox->erasor,SIGNAL(clicked()),drawArea,SLOT(erasor()));橡皮擦的實(shí)現(xiàn)和畫(huà)筆是同樣的原理,只不過(guò)將畫(huà)筆的顏色設(shè)置為白色,可以涂去畫(huà)板上的內(nèi)容。</p><p> pen.setColor(Qt::white);</p>
108、<p> 添加eraser寬度組合框</p><p> eraser寬度信號(hào)與槽相關(guān)聯(lián)</p><p> connect(controlBox->erasorComboBox,SIGNAL(currentIndexChanged(int)),drawArea,SLOT(setErasorWidth(int)));</p><p> 槽函數(shù)獲
109、得一個(gè)索引值賦給erasorWith,執(zhí)行pen.setWidth(erasorWidth);可設(shè)置橡皮擦寬度。</p><p> 3.3 鼠標(biāo)形狀設(shè)置</p><p><b> 第一種:</b></p><p> this->setCursor(Qt::CrossCursor);內(nèi)部鼠標(biāo)形狀。</p><p&g
110、t;<b> 第二種:</b></p><p> QCursor*cursor=newQCursor(QPixmap(":/new/prefix1/image/10mm.png"),-1,-1);</p><p> this->setCursor(*cursor);自定義鼠標(biāo)形狀。</p><p> 3.4坐標(biāo)
111、位置顯示功能的實(shí)現(xiàn)</p><p> 這里涉及到鼠標(biāo)移動(dòng)事件以及信號(hào)—槽機(jī)制。</p><p> 在畫(huà)板類(lèi)中的鼠標(biāo)移動(dòng)事件中發(fā)射一個(gè)信號(hào):</p><p> Emit signalMousePos(e->pos().x(),e->pos().y());</p><p> 意思是將獲得的當(dāng)前鼠標(biāo)位置坐標(biāo)作為信號(hào)的參數(shù)進(jìn)行發(fā)送
112、。</p><p> 在主窗口類(lèi)中定義一個(gè)槽函數(shù)如下:</p><p> void MainWindow::setMousePosDisplay(int x, int y)</p><p><b> {</b></p><p> QString str = "(" + QString::num
113、ber(x) + "," +QString::number(y) + ")";</p><p> statusBar()->showMessage(str);</p><p> }用以得到當(dāng)前鼠標(biāo)的坐標(biāo)位置。</p><p><b> 將信號(hào)和槽相關(guān)聯(lián)</b></p><p
114、> connect(drawArea,SIGNAL(signalMousePos(int,int)),this,SLOT(setMousePosDisplay(int,int)));</p><p> 本項(xiàng)目的內(nèi)容以及畫(huà)圖工具功能的實(shí)現(xiàn)基本如上所述。</p><p><b> 結(jié)束語(yǔ)</b></p><p> 通過(guò)本次項(xiàng)目的制作,
115、我學(xué)到了很多的知識(shí),這些知識(shí)不僅僅是關(guān)于QT方面的理論和技術(shù),更重要的是在制作項(xiàng)目的過(guò)程中,我學(xué)會(huì)了建立工程的思想,以及解決所遇到的調(diào)試問(wèn)題的方法。</p><p> 就本次的項(xiàng)目而言,它只是一個(gè)簡(jiǎn)單的畫(huà)圖軟件,在建立工程的初期,只能去參照別人制作的標(biāo)準(zhǔn)畫(huà)圖軟件,了解它的大致結(jié)構(gòu),比如它的功能以及各個(gè)功能的運(yùn)行次序、交互界面框架。根據(jù)這些基本的參考,去設(shè)計(jì)數(shù)據(jù)間結(jié)構(gòu),類(lèi)與類(lèi)之間的調(diào)用關(guān)系,并形成初步的思想。&l
116、t;/p><p> QT是一門(mén)基于嵌入式的語(yǔ)言,使用QT編寫(xiě)的軟件便于移植和修改。QT有一個(gè)非常的特色,經(jīng)過(guò)以上的陳述已經(jīng)很清楚,那就是,QT所擁有的信號(hào)-槽機(jī)制,從上面的程序中可以看到,在很多功能的實(shí)現(xiàn)過(guò)程中幾乎都用到了信號(hào)-槽機(jī)制,這種機(jī)制有點(diǎn)類(lèi)似事件機(jī)制,但是很大的不同是,信號(hào)-槽機(jī)制要比事件機(jī)制運(yùn)用起來(lái)靈活方便。</p><p> 同樣的,QT也有著和其它語(yǔ)言相似之處,比如,它也有
117、事件機(jī)制,如:鍵盤(pán)事件、鼠標(biāo)事件等等。</p><p> 經(jīng)過(guò)這樣的練習(xí),并自己動(dòng)手來(lái)操作,在編程方面使我有了很大的提高。尤其是一向不太擅長(zhǎng)動(dòng)手的我,在指導(dǎo)老師的鼓勵(lì)和幫助下,開(kāi)始對(duì)軟件的編程有了一定的門(mén)路。</p><p><b> 致謝</b></p><p> 一段緊張而又充實(shí)的課程設(shè)計(jì)即將結(jié)束之時(shí),我終于把畫(huà)圖工具做好了。這一過(guò)程
118、使我真正明白了功夫不負(fù)有心人。這是我學(xué)業(yè)發(fā)展過(guò)程當(dāng)中一次寶貴的體驗(yàn)。</p><p> 本項(xiàng)目剛開(kāi)始時(shí)我都不知道怎么著手,而且還存在一種恐懼的心態(tài),總覺(jué)得讓我去實(shí)現(xiàn)這樣的一個(gè)畫(huà)圖工具是萬(wàn)萬(wàn)不可能的,這樣的心態(tài)也成了項(xiàng)目制作過(guò)程中的一個(gè)阻礙,不過(guò)感到慶幸的是,指導(dǎo)老師用耐心和認(rèn)真不斷地做引導(dǎo)和鼓勵(lì)的工作,雖然在這其間遇到很多的挫折和難題,但在老師的幫助下,經(jīng)過(guò)一番努力,自己也漸漸開(kāi)始有了一點(diǎn)頭緒。接下來(lái),自己重新
119、去翻看課本知識(shí),再加上老師提供的一些資料,設(shè)計(jì)思路逐漸清晰,一步一步地完成了軟件的功能分析、數(shù)據(jù)的結(jié)構(gòu),同時(shí)也品嘗到了付出汗水之后換來(lái)的一點(diǎn)小小成功的喜悅。</p><p> 接著我們開(kāi)始著手來(lái)建立工程,在構(gòu)造主窗口外部框架的時(shí)候,稍微遇到一點(diǎn)問(wèn)題,但在同學(xué)的幫助下,之后總算將基本的外部框架構(gòu)造完成,但是這還遠(yuǎn)遠(yuǎn)不夠,在上面的描述當(dāng)中可以看到,除了主窗口以外,還有懸浮窗,以及畫(huà)板,所以這樣一來(lái)就需要?jiǎng)?chuàng)建三個(gè)類(lèi)。
120、</p><p> 這時(shí)我遇到了問(wèn)題,因?yàn)槲抑皬膩?lái)都沒(méi)有做過(guò)像這樣的工程,在同一個(gè)工程里面同時(shí)創(chuàng)建三個(gè)類(lèi),而且它們之間還要相互調(diào)用,信號(hào)與槽相互關(guān)聯(lián)。所以非常感謝我的指導(dǎo)老師,是他幫助和引導(dǎo)我來(lái)學(xué)習(xí)這門(mén)課程,最終教會(huì)了我怎樣使用類(lèi)似這么復(fù)雜的調(diào)用和對(duì)類(lèi)的定義。</p><p> 這次項(xiàng)目的完成,讓我對(duì)軟件工程有了更深層次的認(rèn)識(shí),并且明白了實(shí)際的設(shè)計(jì)經(jīng)驗(yàn)對(duì)于做好軟件的必要性。課本上的理
121、論知識(shí)聯(lián)系實(shí)際之后更能體現(xiàn)出知識(shí)的價(jià)值。在課本理論知識(shí)的基礎(chǔ)之上聯(lián)系實(shí)際,多搜集資料,多動(dòng)手才能真正的做到學(xué)以致用,才能在未來(lái)的工作中,在激烈的社會(huì)競(jìng)爭(zhēng)中立于不敗之地。</p><p> 最后,再次忠心的感謝所有幫助過(guò)我的同學(xué)們,尤其是我的指導(dǎo)老師,謝謝你們!</p><p><b> 參考文獻(xiàn)</b></p><p> 基于嵌入式Lin
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖形圖像課程設(shè)計(jì)---圖像銳化
- 圖形圖像處理課程設(shè)計(jì)報(bào)告
- 圖形圖像處理綜合課程設(shè)計(jì)題目
- 基于PHOTOSHOP圖形圖像操作課程考試系統(tǒng)的研究.pdf
- 圖形圖像論文處理
- 圖形圖像處理圖像分割
- 基于空間教學(xué)的《圖形圖像處理》課程改革的初探
- 專(zhuān)題十五圖形圖像專(zhuān)題
- 圖形圖像處理matlab
- 圖形圖像界面中的圖標(biāo)設(shè)計(jì).pdf
- 激光直寫(xiě)機(jī)圖形圖像軟件設(shè)計(jì)
- 單元七圖形圖像處理
- ps圖形圖像處理教案
- 幾種圖形圖像壓縮方法.pdf
- ps圖形圖像處理教案
- 基于圖形圖像技術(shù)的鞋類(lèi)造型仿真設(shè)計(jì)的研究.pdf
- 《photoshop圖形圖像處理》課程教學(xué)改革方案
- 圖形圖像廣告平面設(shè)計(jì)畢業(yè)論文
- 圖形圖像廣告平面設(shè)計(jì)畢業(yè)論文
- 激光直寫(xiě)機(jī)圖形圖像軟件設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論