版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——鼠標(biāo)事件鼠標(biāo)事件【例】(簡單)(CH601)本例將介紹如何獲得和處理鼠標(biāo)事件。程序最終演示效果如圖。鼠標(biāo)事件(1)在頭文件mouseevent.h中,重定義了QWidget類的三個鼠標(biāo)事件方法,即mouseMoveEvent、mousePressEvent和mouseReleaseEvent。當(dāng)有鼠標(biāo)事件發(fā)生時,就會響應(yīng)相應(yīng)的函數(shù),其具體內(nèi)容如下:#include<QMainWindow>#include<QLabel>#include<QStatusBar>#include<QMouseEvent>classMouseEvent:publicQMainWindow{Q_OBJECTpublic:MouseEvent(QWidget*parent=0);~MouseEvent();protected:voidmousePressEvent(QMouseEvent*e);voidmouseMoveEvent(QMouseEvent*e);voidmouseReleaseEvent(QMouseEvent*e);voidmouseDoubleClickEvent(QMouseEvent*e);private:QLabel*statusLabel;QLabel*MousePosLabel;};鼠標(biāo)事件(2)源文件mouseevent.cpp的具體代碼如下:#include"mouseevent.h"MouseEvent::MouseEvent(QWidget*parent):QMainWindow(parent){setWindowTitle(tr("鼠標(biāo)事件")); //設(shè)置窗體的標(biāo)題statusLabel=newQLabel; //(a)statusLabel->setText(tr("當(dāng)前位置:"));statusLabel->setFixedWidth(100);MousePosLabel=newQLabel; //(b)MousePosLabel->setText(tr(""));MousePosLabel->setFixedWidth(100);statusBar()->addPermanentWidget(statusLabel); //(c)statusBar()->addPermanentWidget(MousePosLabel);this->setMouseTracking(true); //(d)resize(400,200);}鼠標(biāo)事件mousePressEvent()函數(shù)為鼠標(biāo)按下事件響應(yīng)函數(shù),QMouseEvent類的button()方法可以獲得發(fā)生鼠標(biāo)事件的按鍵屬性(左鍵、右鍵、中鍵等)。具體代碼如下:voidMouseEvent::mousePressEvent(QMouseEvent*e){QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")"; //(a)if(e->button()==Qt::LeftButton){statusBar()->showMessage(tr("左鍵:")+str);}elseif(e->button()==Qt::RightButton){statusBar()->showMessage(tr("右鍵:")+str);}elseif(e->button()==Qt::MidButton){statusBar()->showMessage(tr("中鍵:")+str);}}鼠標(biāo)事件mouseMoveEvent()函數(shù)為鼠標(biāo)移動事件響應(yīng)函數(shù),QMouseEvent類的x()和y()方法可以獲得鼠標(biāo)的相對位置,即相對于應(yīng)用程序的位置。具體代碼如下:voidMouseEvent::mouseMoveEvent(QMouseEvent*e){MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())
+")");}mouseReleaseEvent()函數(shù)為鼠標(biāo)松開事件響應(yīng)函數(shù),其具體代碼如下:voidMouseEvent::mouseReleaseEvent(QMouseEvent*e){QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")";statusBar()->showMessage(tr("釋放在:")+str,3000);}mouseDoubleClickEvent()函數(shù)為鼠標(biāo)雙擊事件響應(yīng)函數(shù),此處沒有實現(xiàn)具體功能,但仍要寫出函數(shù)體框架:voidMouseEvent::mouseDoubleClickEvent(QMouseEvent*e){}鼠標(biāo)事件(3)運行程序,效果如圖。QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——鍵盤事件鍵盤事件【例】(難度一般)(CH602)下面通過實現(xiàn)鍵盤控制圖標(biāo)的移動來介紹鍵盤事件的應(yīng)用,如圖。鍵盤事件具體實現(xiàn)步驟如下。(1)頭文件keyevent.h的具體內(nèi)容如下:#include<QWidget>#include<QKeyEvent>#include<QPaintEvent>classKeyEvent:publicQWidget{ Q_OBJECTpublic: KeyEvent(QWidget*parent=0); ~KeyEvent(); voiddrawPix(); voidkeyPressEvent(QKeyEvent*); voidpaintEvent(QPaintEvent*);private: QPixmap*pix; //作為一個繪圖設(shè)備,使用雙緩沖機制實現(xiàn)圖形的繪制 QImageimage; //界面中間的小圖標(biāo) /*圖標(biāo)的左上頂點位置*/ intstartX; intstartY; /*界面的寬度和高度*/ intwidth; intheight; intstep; //網(wǎng)格的大小,即移動的步進(jìn)值};鍵盤事件(2)源文件keyevent.cpp的具體代碼如下:#include"keyevent.h"#include<QPainter>KeyEvent::KeyEvent(QWidget*parent):QWidget(parent){setWindowTitle(tr("鍵盤事件"));setAutoFillBackground(true);QPalettepalette=this->palette();palette.setColor(QPalette::Window,Qt::white);setPalette(palette);setMinimumSize(512,256);setMaximumSize(512,256);width=size().width();height=size().height();pix=newQPixmap(width,height);pix->fill(Qt::white);image.load("../image/image.png");startX=100;startY=100;step=20;drawPix();resize(512,256);}鍵盤事件(3)在項目工程所在目錄下新建一個文件夾并命名為image,在文件夾內(nèi)保存一個名為“image.png”的圖片;在項目中按照以下步驟添加資源文件。①在項目名“KeyEvent”上單擊鼠標(biāo)右鍵→“添加新文件…”菜單項,在如圖6.3所示的對話框中單擊“Qt”(模板)→“QtResourceFile”→“Choose...”按鈕。鍵盤事件②在彈出的對話框中選擇資源要存放的路徑,如圖,在“名稱”欄中填寫資源名稱“keyevent”。
單擊“下一步”按鈕,單擊“完成”按鈕。此時,項目下自動添加了一個“keyevent.qrc”資源文件,如圖。鍵盤事件③鼠標(biāo)右擊資源文件,選擇“AddPrefix...”菜單項,在彈出的“AddPrefix”對話框的“Prefix:”欄中填寫“/new/prefix1”,單擊“OK”按鈕,此時項目目錄樹右區(qū)資源文件下新增了一個“/new/prefix1”子目錄項,單擊該區(qū)下方“添加”按鈕上的,選擇“添加文件”,按照如圖的步驟操作,在彈出的對話框中選擇“image/image.png”文件,單擊“打開”按鈕,將該圖片添加到項目中。鍵盤事件(4)drawPix()函數(shù)實現(xiàn)了在QPixmap對象上繪制圖像,其具體代碼如下:voidKeyEvent::drawPix(){pix->fill(Qt::white); //重新刷新pix對象為白色底色QPainter*painter=newQPainter; //創(chuàng)建一個QPainter對象QPenpen(Qt::DotLine); //(a)for(inti=step;i<width;i=i+step) //按照步進(jìn)值的間隔繪制縱向的網(wǎng)格線{painter->begin(pix); //指定pix為繪圖設(shè)備painter->setPen(pen);painter->drawLine(QPoint(i,0),QPoint(i,height));painter->end();}for(intj=step;j<height;j=j+step) //按照步進(jìn)值的間隔繪制橫向的網(wǎng)格線{painter->begin(pix);painter->setPen(pen);painter->drawLine(QPoint(0,j),QPoint(width,j));painter->end();}painter->begin(pix);painter->drawImage(QPoint(startX,startY),image); //(b)painter->end();}鍵盤事件keyPressEvent()函數(shù)處理鍵盤的按下事件,具體代碼。界面重繪函數(shù)paintEvent(),將pix繪制在界面上。其具體代碼如下:voidKeyEvent::paintEvent(QPaintEvent*){QPainterpainter;painter.begin(this);painter.drawPixmap(QPoint(0,0),*pix);painter.end();}鍵盤事件(5)運行結(jié)果如圖。QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——事件過濾事件過濾【例】(難度一般)
(CH603)通過事件過濾器實現(xiàn)動態(tài)圖片按鈕效果,如圖。事件過濾具體實現(xiàn)步驟如下。(1)頭文件eventfilter.h中聲明了所需的各種控件及槽函數(shù),其具體代碼如下:#include<QDialog>#include<QLabel>#include<QImage>#includ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 平江縣輔警考試試題及答案
- 2026湖南高速工程咨詢有限公司招聘專業(yè)技術(shù)人員10人備考考試題庫附答案解析
- 生產(chǎn)用水水資源管理制度
- 商品生產(chǎn)與資本制度
- 2026江西興宜全過程項目咨詢有限公司招聘1人參考考試題庫附答案解析
- 茶葉生產(chǎn)銷售制度
- 生產(chǎn)許可準(zhǔn)入制度
- 化肥生產(chǎn)廠安全制度
- 鐵路安全生產(chǎn)檢查制度
- 變電所安全生產(chǎn)責(zé)任制度
- 四川省綿陽市涪城區(qū)2024-2025學(xué)年九年級上學(xué)期1月期末歷史試卷(含答案)
- 兒童故事繪本愚公移山課件模板
- IIT臨床研究培訓(xùn)
- 空調(diào)機組售后服務(wù)承諾及人員培訓(xùn)計劃
- 第四屆全國儀器儀表行業(yè)職業(yè)技能競賽-無人機裝調(diào)檢修工(儀器儀表檢測)理論考試題庫(含答案)
- 國家職業(yè)技術(shù)技能標(biāo)準(zhǔn) 4-10-01-05 養(yǎng)老護(hù)理員 人社廳發(fā)201992號
- GB/T 5169.13-2024電工電子產(chǎn)品著火危險試驗第13部分:灼熱絲/熱絲基本試驗方法材料的灼熱絲起燃溫度(GWIT)試驗方法
- 中國驢肉行業(yè)競爭格局及發(fā)展前景預(yù)測研究報告(2024-2030)
- 財務(wù)負(fù)責(zé)人信息表
- crtd植入術(shù)護(hù)理查房
- 徐州市2023-2024學(xué)年八年級上學(xué)期期末英語試卷(含答案解析)
評論
0/150
提交評論