Qt 5 開發(fā)及實例(第5版) 課件 第6章 Qt 5事件處理及實例_第1頁
Qt 5 開發(fā)及實例(第5版) 課件 第6章 Qt 5事件處理及實例_第2頁
Qt 5 開發(fā)及實例(第5版) 課件 第6章 Qt 5事件處理及實例_第3頁
Qt 5 開發(fā)及實例(第5版) 課件 第6章 Qt 5事件處理及實例_第4頁
Qt 5 開發(fā)及實例(第5版) 課件 第6章 Qt 5事件處理及實例_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——鼠標事件鼠標事件【例】(簡單)(CH601)本例將介紹如何獲得和處理鼠標事件。程序最終演示效果如圖。鼠標事件(1)在頭文件mouseevent.h中,重定義了QWidget類的三個鼠標事件方法,即mouseMoveEvent、mousePressEvent和mouseReleaseEvent。當有鼠標事件發(fā)生時,就會響應相應的函數,其具體內容如下:#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;};鼠標事件(2)源文件mouseevent.cpp的具體代碼如下:#include"mouseevent.h"MouseEvent::MouseEvent(QWidget*parent):QMainWindow(parent){setWindowTitle(tr("鼠標事件")); //設置窗體的標題statusLabel=newQLabel; //(a)statusLabel->setText(tr("當前位置:"));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);}鼠標事件mousePressEvent()函數為鼠標按下事件響應函數,QMouseEvent類的button()方法可以獲得發(fā)生鼠標事件的按鍵屬性(左鍵、右鍵、中鍵等)。具體代碼如下: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);}}鼠標事件mouseMoveEvent()函數為鼠標移動事件響應函數,QMouseEvent類的x()和y()方法可以獲得鼠標的相對位置,即相對于應用程序的位置。具體代碼如下:voidMouseEvent::mouseMoveEvent(QMouseEvent*e){MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())

+")");}mouseReleaseEvent()函數為鼠標松開事件響應函數,其具體代碼如下:voidMouseEvent::mouseReleaseEvent(QMouseEvent*e){QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")";statusBar()->showMessage(tr("釋放在:")+str,3000);}mouseDoubleClickEvent()函數為鼠標雙擊事件響應函數,此處沒有實現具體功能,但仍要寫出函數體框架:voidMouseEvent::mouseDoubleClickEvent(QMouseEvent*e){}鼠標事件(3)運行程序,效果如圖。QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——鍵盤事件鍵盤事件【例】(難度一般)(CH602)下面通過實現鍵盤控制圖標的移動來介紹鍵盤事件的應用,如圖。鍵盤事件具體實現步驟如下。(1)頭文件keyevent.h的具體內容如下:#include<QWidget>#include<QKeyEvent>#include<QPaintEvent>classKeyEvent:publicQWidget{ Q_OBJECTpublic: KeyEvent(QWidget*parent=0); ~KeyEvent(); voiddrawPix(); voidkeyPressEvent(QKeyEvent*); voidpaintEvent(QPaintEvent*);private: QPixmap*pix; //作為一個繪圖設備,使用雙緩沖機制實現圖形的繪制 QImageimage; //界面中間的小圖標 /*圖標的左上頂點位置*/ intstartX; intstartY; /*界面的寬度和高度*/ intwidth; intheight; intstep; //網格的大小,即移動的步進值};鍵盤事件(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,在文件夾內保存一個名為“image.png”的圖片;在項目中按照以下步驟添加資源文件。①在項目名“KeyEvent”上單擊鼠標右鍵→“添加新文件…”菜單項,在如圖6.3所示的對話框中單擊“Qt”(模板)→“QtResourceFile”→“Choose...”按鈕。鍵盤事件②在彈出的對話框中選擇資源要存放的路徑,如圖,在“名稱”欄中填寫資源名稱“keyevent”。

單擊“下一步”按鈕,單擊“完成”按鈕。此時,項目下自動添加了一個“keyevent.qrc”資源文件,如圖。鍵盤事件③鼠標右擊資源文件,選擇“AddPrefix...”菜單項,在彈出的“AddPrefix”對話框的“Prefix:”欄中填寫“/new/prefix1”,單擊“OK”按鈕,此時項目目錄樹右區(qū)資源文件下新增了一個“/new/prefix1”子目錄項,單擊該區(qū)下方“添加”按鈕上的,選擇“添加文件”,按照如圖的步驟操作,在彈出的對話框中選擇“image/image.png”文件,單擊“打開”按鈕,將該圖片添加到項目中。鍵盤事件(4)drawPix()函數實現了在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) //按照步進值的間隔繪制縱向的網格線{painter->begin(pix); //指定pix為繪圖設備painter->setPen(pen);painter->drawLine(QPoint(i,0),QPoint(i,height));painter->end();}for(intj=step;j<height;j=j+step) //按照步進值的間隔繪制橫向的網格線{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()函數處理鍵盤的按下事件,具體代碼。界面重繪函數paintEvent(),將pix繪制在界面上。其具體代碼如下:voidKeyEvent::paintEvent(QPaintEvent*){QPainterpainter;painter.begin(this);painter.drawPixmap(QPoint(0,0),*pix);painter.end();}鍵盤事件(5)運行結果如圖。QT5開發(fā)及實例(第5版)第6章Qt5事件處理及實例——事件過濾事件過濾【例】(難度一般)

(CH603)通過事件過濾器實現動態(tài)圖片按鈕效果,如圖。事件過濾具體實現步驟如下。(1)頭文件eventfilter.h中聲明了所需的各種控件及槽函數,其具體代碼如下:#include<QDialog>#include<QLabel>#include<QImage>#includ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論