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