《QT圖形用戶界面》PPT課件.ppt
《《QT圖形用戶界面》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《QT圖形用戶界面》PPT課件.ppt(44頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
圖形用戶界面QT第四章 本章計(jì)劃 可視對(duì)象的返回值和數(shù)據(jù)鼠標(biāo) 鍵盤 定時(shí)器等事件的捕捉一些事件的虛函數(shù)重載 信號(hào)從基類轉(zhuǎn)發(fā)掌握QDialog QTimer QTime掌握QSettings QSqlDatabase了解QtNetWork掌握QGraphicsView QGraphicsScene掌握QGraphicsItem QPixmap 計(jì)算器里的關(guān)于窗口 上面有2個(gè)按鈕 確定和取消 QMainWindow怎么知道你按了哪一個(gè)呢 首先 那個(gè)是一個(gè)按鈕組buttonBox 是QDialog組件里就關(guān)聯(lián)好信號(hào)的 在信號(hào)和槽編輯器里能看的到 我們可以看看QDialog的槽accept 和rejecct 起什么作用 看HELP文檔 可視對(duì)象的返回值和數(shù)據(jù) QDialog的槽accept 和rejecct HELP文檔里是這么解釋的 看懂了嗎 voidQDialog accept virtualslot HidesthemodaldialogandsetstheresultcodetoAccepted voidQDialog reject virtualslot HidesthemodaldialogandsetstheresultcodetoRejected voidQDialog accepted signal Thissignalisemittedwhenthedialoghasbeenacceptedeitherbytheuserorbycallingaccept ordone withtheQDialog Acceptedargument QDialog的返回值 跟據(jù)HELP文檔 我們可以這樣寫代碼 鼠標(biāo) 鍵盤 定時(shí)器等事件的捕捉 事件在Qt里分很多種 比如鼠標(biāo) 鍵盤 定時(shí)器 窗體擴(kuò)大縮小 有鼠標(biāo)飄過 有數(shù)值變化等等 任何一個(gè)小動(dòng)作 在GUI里都會(huì)觸發(fā)某種事件 當(dāng)事件產(chǎn)生時(shí) 怎么來進(jìn)行處理呢 跟據(jù)C 的語言特性 虛函數(shù)重載可以解決這個(gè)問題 所有可以處理的事件 一定都是虛函數(shù) 現(xiàn)在我們來做一個(gè)close事件處理 close事件的捕捉 還記得第一個(gè)例子嗎 一個(gè)按鈕一按就關(guān)閉窗口了 當(dāng)然按右上角的X 也可以關(guān)閉 但有的窗口按了右上角的X會(huì)跳出一個(gè)框來 這個(gè)是通過重載關(guān)閉事件而處理出的一個(gè)框 怎么做呢 QMainWindow的close事件在哪 剛剛講過 所有能處理的事件 一定是虛函數(shù) 那虛函數(shù)去哪找 去protected里找 現(xiàn)在我們要關(guān)閉的是QMainWindow 并且要它跳出那個(gè)框出來 怎么找相應(yīng)事件呢 來查下HELP文檔 QMainWindow的close事件在哪 點(diǎn)不出來吧 為啥 因?yàn)镼MainWindow沒有 那怎么查 去找它的基類 它一定是從基類里繼承了所有的事件 點(diǎn)進(jìn)Qwidget這個(gè)基類以后 再點(diǎn)ProtectedFuntions QMainWindow的close事件在哪 找到close事件了點(diǎn)進(jìn)看去說明和例子 Bydefault theeventisacceptedandthewidgetisclosed Youcanreimplementthisfunctiontochangethewaythewidgetrespondstowindowcloserequests Forexample youcanpreventthewindowfromclosingbycallingignore onallevents 你看不懂可以復(fù)制查google百度有道翻譯就對(duì)了 要還在發(fā)呆 就是你的不對(duì)了 重載基類的虛函數(shù)的代碼怎么寫 1 想想C 語法 派生類怎么去重載基類的虛函數(shù)把聲明抄過來 cpp的重載代碼怎么寫 C語言就強(qiáng)調(diào)了 用誰的東西 就include誰的頭文件一按X就重載了close事件 在這里我們用QMessageBox速生成了一個(gè)小框 然后取它的返回值看你按了什么鍵 如果按的取消 據(jù)據(jù)QMainWindow的HELP文檔用ignore 接口忽略close事件 中文顯示的處理 includeintmain intargc char argv QApplicationa argc argv QTextCodec codec QTextCodec codecForName GB2312 QTextCodec setCodecForLocale codec QTextCodec setCodecForCStrings codec QTextCodec setCodecForTr codec MainWindoww w show returna exec 一個(gè)窗口有多少種事件可以處理呢 看看HELP文檔里的protected里有多少種事件一定要學(xué)會(huì)查HELP文檔 查google翻譯現(xiàn)在我們小試了中間的一個(gè)close事件 其它的事件后續(xù)會(huì)有介紹 來做一個(gè)定時(shí)器 我們需要用到QTimer這個(gè)類 查HELP文檔QTimer是個(gè)什么類 查接口 信號(hào) 槽 和例子 QTimer定時(shí)器 你可以先從DetailedDescription示例開始看QTimer timer newQTimer this connect timer SIGNAL timeout this SLOT update timer start 1000 看到這個(gè)例子代碼 基本知道怎么用這個(gè)定時(shí)器了定時(shí)器對(duì)象需要生成 定時(shí)器用start 啟動(dòng) 有2個(gè)重載 帶形參的是毫秒間隙時(shí)間 定時(shí)器啟動(dòng)以后 每隔間隙時(shí)間發(fā)來一個(gè)timeout 信號(hào) 你可以去連接一個(gè)你的槽來處理 練習(xí)做定時(shí)器 要求 1 按start就開始一秒一秒的計(jì)時(shí)2 按pause就暫停顯示 但背地里還在計(jì)時(shí) 再按pause就顯示實(shí)際的時(shí)間按stop就停 再按一次就清零按X退出時(shí) 要有對(duì)話框有幫助 關(guān)于QDialog 上面寫上XXX幾幾年幾幾月幾日制做 版本V0 1 對(duì)Qt的幾點(diǎn)總結(jié)和感悟 做了一些GUI程序以后 我們總結(jié)一下Qt只是提供一些GUI的顯示 和一些功能類 對(duì)象與對(duì)象 對(duì)象與GUI的邏輯關(guān)聯(lián) 和Qt沒有關(guān)系Qt提供數(shù)據(jù)傳輸和通道方案邏輯關(guān)系完全是由C結(jié)構(gòu)實(shí)現(xiàn)Qt對(duì)象有什么功能 怎么和其它對(duì)象連接 要多查HELP文檔你體會(huì)出來了嗎 QtGUI鞏固練習(xí) 電子鐘 做一個(gè)電子鐘 24小時(shí)制顯示時(shí) 分 鈔時(shí)分鈔中的 需要一秒一閃當(dāng)按日期按鈕時(shí) 需要變成日期顯示日期格式年 月 日日期顯示完5秒后 又變回時(shí)間顯示查HELP里QTime時(shí)間類的使用 顯示用QLCDnumber類注意邏輯是C語法才能實(shí)現(xiàn) Qt的一些其它類QGraphicsView QGraphicsView動(dòng)態(tài)2D顯示容器查看一下HELP里它的DetailedDescriptionQGraphicsView提供了一個(gè)界面 它既可以管理大數(shù)量的定制2Ditems 又可與它們交互 有一個(gè)viewwidget可以把這些項(xiàng)繪制出來 并支持旋轉(zhuǎn)與縮放 這個(gè)柜架也包含一個(gè)事件傳播結(jié)構(gòu) 對(duì)于在scene中的這些items 它具有雙精度的交互能力 Items能處理鍵盤事件 鼠標(biāo)的按 移動(dòng) 釋放 雙擊事件 也可以跟蹤鼠標(biāo)移動(dòng) 整個(gè)框架是這樣的QGraphicsView容器 QGraphicsScene場景 QGraphicsItem圖元 Qt的一些其它類QGraphicsView QGraphicsView里包含了QGraphicsScene而QGraphicsScene擁有多個(gè)圖元 包含三層 背景層 圖元層 前景層QGraphicsItem圖元支持鼠標(biāo)事件 滾輪事件 上下文菜單事件支持鍵盤輸入焦點(diǎn) 按鍵事件支持拖放支持分組 Qt的一些其它類QGraphicsView QGraphicsItem圖元類 只是一個(gè)虛基類 有8種不同的派生類 QGraphicsEllipseItem橢圓圖元QGraphicsLineItem線圖元QGraphicsPathItem曲線圖元QGraphicsPixmapItem像素圖元QGraphicsPolygonItem多邊形圖元QGraphicsRectItem矩形圖元QGraphicsSimpleTextItem文本標(biāo)簽圖元QGraphicsTextItem文本瀏覽器圖元 Qt的一些其它類QGraphicsView 我們以QGraphicsPixmapItem像素圖元為例 介紹框架的連接QGraphicsPixmapItem像素圖元 也就是拿一張圖片來顯示圖元程序框架如下QMainWindow QGraphicsView容器 QGraphicsScene場景 QGraphicsPixmapItem像素圖元 Qt的一些其它類QGraphicsView QMainWindow和QGraphicsView怎么連接 畫上去就可以了拖過去 大約拉大一點(diǎn) View容器場景像素圖元 QGraphicsView容器 QGraphicsScene場景 QGraphicsPixmapItem像素圖元場影和圖元怎么連接View呢 場影和圖元在這里每個(gè)類需要派生一個(gè)自已改造的類 為此我們要建 h和 cpp場景我們建myScene圖元我們建myItem 建場景 1324 建圖元 用同樣的方法建圖元 并且是像素圖元注意 這里的類型信息沒有繼承自QObjectQGraphicsPixmapItem的基類是QGraphicsItem 但是QGraphicsItem并沒有繼承自QObject 這意味著QGraphicsPixmapItem不能使用信號(hào)和槽通信 View容器 場景 像素圖元 QGraphicsView容器 QGraphicsScene場景 QGraphicsPixmapItem像素圖元查HELP文檔View的DetailedDescription有一個(gè)例子 是用對(duì)象構(gòu)造的方法來加入了scene的關(guān)連QGraphicsViewview View容器 場景 在mainwindow h里包含myscene h頭文件 創(chuàng)建一個(gè)對(duì)象 調(diào)用setScene接口和View關(guān)連 場景 像素圖元 QGraphicsScene場景 QGraphicsPixmapItem像素圖元查HELP文檔QGraphicsScene找關(guān)連Item的接口 查add set之類的關(guān)鍵詞找到voidaddItem QGraphicsItem item 先不管空間泄露總之已經(jīng)關(guān)連了 2DQGraphicsView OK 我們完成了2D圖形的程序框架如下QMainWindow QGraphicsView容器 QGraphicsScene場景 QGraphicsPixmapItem像素圖元到此程序編譯成功 可以運(yùn)行 但是一片空白 為啥 因?yàn)閕tem并沒有貼上像素 也就是沒有貼圖片GUI也就是在繪圖 或是顯示圖片現(xiàn)在我們給Item貼上圖片 QGraphicsPixmapItem像素圖元貼圖 QGraphicsPixmapItem像素圖元查HELP文檔QGraphicsPixmapItem找相關(guān)貼圖的接口 還是找add set Pixmap相關(guān)的單詞 英語不好的童鞋好好查友道詞典 不要發(fā)呆 不要等別人現(xiàn)成的答案 QGraphicsPixmapItem像素圖元貼圖 找到voidsetPixmap constQPixmap形參需要一個(gè)QPixmap的類 繼續(xù)看QPixmapFormat格式支持里 支持BMPGIFJPGPNG等很多的圖片格式 但是原生只支持BMP和PNG 但其它的格式都通過了插件的模式支持了 怎么把圖片的格式轉(zhuǎn)換成QPixmap呢 找接口 圖片是一個(gè)文件 一個(gè)filename 就找filename相關(guān)QPixmap constQString fileName constchar format 0 Qt ImageConversionFlagsflags Qt AutoColor boolload constQString fileName constchar format 0 Qt ImageConversionFlagsflags Qt AutoColor 一個(gè)是構(gòu)造時(shí)就可以轉(zhuǎn)換 一個(gè)是用load 來轉(zhuǎn)換 QGraphicsPixmapItem像素圖元貼圖 要貼的圖片文件要先加入資源文件 這里取名ppp加完了以后 雙擊ppp qrc QGraphicsPixmapItem像素圖元貼圖 1231 添加前綴2 下面的前綴很長 改成 在這里的路徑和程序里的路徑都按Linux Unix標(biāo)準(zhǔn)45度的杠執(zhí)行 3 把你要的圖片文件先復(fù)制到工程文件夾下 再去按 添加 添加文件 可以一次性框選多個(gè)文件 QGraphicsPixmapItem像素圖元貼圖 好了 開始給Item貼圖這里調(diào)用QGraphicsPixmapItem的setPixmap 接口直接用QPixmap構(gòu)造函數(shù)生成無名對(duì)象輸入setPixmap 現(xiàn)在運(yùn)行一下程序看看 有圖片了 應(yīng)用 這么大的力氣 顯示了一張圖 你可以顯示4張圖 然后加上定時(shí)器 打地鼠 再多顯示幾張 圍棋 國際象棋 如果讓item在一秒內(nèi)多次移動(dòng)坐標(biāo)動(dòng)起來的話 對(duì)了 可以做俄羅斯方塊如果把圖片貼的漂亮一點(diǎn) 內(nèi)容再豐富一點(diǎn) 植物大戰(zhàn)僵尸 小鳥 沒有做不到 只有想不到 鼠標(biāo)事件響應(yīng) 還記得protected里的虛函數(shù)么 去找Item的虛函數(shù) 找mouse相關(guān)的虛函數(shù)重載來實(shí)現(xiàn)鼠標(biāo)事件處理virtualvoidmousePressEvent 還記得怎么重載虛函數(shù)不 鼠標(biāo)事件響應(yīng) 點(diǎn)了以后 讓他變張圖運(yùn)行一下試試看 變了沒 鼠標(biāo)事件響應(yīng)左右鍵區(qū)分雙鍵 查HELP文檔看形參上的QGraphicsSceneMouseEvent是個(gè)什么樣的類button 和buttons 2個(gè)接口用來返回你點(diǎn)了什么鍵注意它們的返回值 是宏定義Qt MouseButton 再去查是什么樣的東西 鼠標(biāo)事件響應(yīng)左右鍵區(qū)分雙鍵 首先你要用QGraphicsSceneMouseEvent的對(duì)象 頭文件不要忘了左 右雙鍵一點(diǎn)點(diǎn)換start png 只是左鍵就換lose png 運(yùn)行一下試試 文件名別打錯(cuò) 怎樣顯示多個(gè)圖片呢 多生成幾個(gè)item對(duì)象并不能看見多張圖片 重復(fù)打開多個(gè)窗口會(huì)重疊 所以要對(duì)每張圖片設(shè)定坐標(biāo)避免重疊 查HELP坐標(biāo)和pos相關(guān) 圖形的邊界大小和bound相關(guān) 階段總結(jié) QT是用于多種平臺(tái)圖形界面程序開發(fā)的C 工具包信號(hào)和槽機(jī)制是Qt編程的基礎(chǔ) 它使程序員可以方便的把這個(gè)程序的對(duì)象綁定在一起 但又不需要讓它們互相緊密關(guān)聯(lián) 2D圖形鼠標(biāo)事件練習(xí) 用QGraphicsView框架顯示4張圖片a做一個(gè)原始的打地鼠游戲要求 隨機(jī)的顯示圖片a一定的時(shí)間 當(dāng)鼠標(biāo)左鍵點(diǎn)擊時(shí) 換圖片b顯示點(diǎn)中的計(jì)分60秒后彈出一個(gè)框顯示你打中了幾個(gè) BTW可以拍同桌的睡相 吃相 XX相貼上去- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- QT圖形用戶界面 QT 圖形 用戶界面 PPT 課件
鏈接地址:http://m.appdesigncorp.com/p-6618119.html