

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