Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)_第1頁(yè)
Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)_第2頁(yè)
Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)_第3頁(yè)
Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)_第4頁(yè)
Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)本文實(shí)例為大家分享了Qt鍵盤(pán)事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng),供大家參考,具體內(nèi)容如下

標(biāo)簽(空格分隔):鍵盤(pán)事件

一、項(xiàng)目?jī)?nèi)容:

新建桌面應(yīng)用程序testKeyEvent,類(lèi)名KeyEvent,基類(lèi)QWidget,通過(guò)重寫(xiě)鍵盤(pán)事件到達(dá)操作的鍵盤(pán)的時(shí)候窗口中的圖片上下左右移動(dòng),類(lèi)似QtCreator設(shè)計(jì)模式下通過(guò)按鍵擺放部件時(shí)的效果。

二、實(shí)現(xiàn)細(xì)節(jié)

keyevent.h內(nèi)容:

#ifndefKEYEVENT_H

#defineKEYEVENT_H

#includeQWidget

QT_BEGIN_NAMESPACE

namespaceUi{classkeyEvent;}

QT_END_NAMESPACE

classkeyEvent:publicQWidget

Q_OBJECT

public:

keyEvent(QWidget*parent=nullptr);

~keyEvent();

voiddrawPix();

//自定義成員函數(shù)用來(lái)在pixmap上繪制網(wǎng)格線和圖片

protected:

voidkeyPressEvent(QKeyEvent*event)override;

//重寫(xiě)鍵盤(pán)按下事件

voidpaintEvent(QPaintEvent*event)override;

//重寫(xiě)繪圖事件

private:

Ui::keyEvent*ui;

QPixmap*m_pix;

QImagem_image;

intm_startX;

//圖標(biāo)頂點(diǎn)的位置

intm_startY;

intm_width;

//界面的寬度和高度

intm_height;

intm_step;

//圖片移動(dòng)的步長(zhǎng)

#endif//KEYEVENT_H

構(gòu)造函數(shù):(初始化窗口大小、pximap、加載圖片、要顯示圖片左上角的坐標(biāo))

keyEvent::keyEvent(QWidget*parent)

:QWidget(parent)

,ui(newUi::keyEvent)

ui-setupUi(this);

setWindowTitle("鍵盤(pán)事件");

setAutoFillBackground(true);

setFixedSize(512,256);

m_width=size().width();

m_height=size().height();

m_pix=newQPixmap(m_width,m_height);

m_pix-fill(Qt::white);

m_image.load("../car.png");//當(dāng)前工作目錄默認(rèn)Debug目錄下,car.png在上一級(jí)目錄下

m_startX=100;

m_startY=100;

m_step=20;

drawPix();

}

drawPix():定義Painter對(duì)象,并設(shè)置畫(huà)筆(虛線),m_pix作為繪圖設(shè)備,在上面繪制網(wǎng)格虛線,還有圖片的位置信息

voidkeyEvent::drawPix()

m_pix-fill(Qt::white);

QPainterpainter(this);

QPenpen(Qt::DotLine);//虛線

painter.begin(m_pix);

//m_pix為繪圖設(shè)備

painter.setPen(pen);

//按照步長(zhǎng)畫(huà)縱向的網(wǎng)格虛線

for(inti=m_step;im_width;i+=m_step){

painter.drawLine(QPoint(i,0),QPoint(i,m_height));

}

//按照步長(zhǎng)畫(huà)橫向的網(wǎng)格虛線

for(intj=m_step;jm_height;j+=m_step){

painter.drawLine(QPoint(0,j),QPoint(m_width,j));

}

painter.end();

//畫(huà)圖片

painter.begin(m_pix);

painter.drawImage(QPoint(m_startX,m_startY),m_image);

painter.end();

}

重寫(xiě)鍵盤(pán)事件

1、按下Ctrl+方向鍵一次圖片移動(dòng)一個(gè)像素的距離

2、普通方向鍵一次移動(dòng)步長(zhǎng)(m_step:20像素)的距離,ui界面下默認(rèn)一次移動(dòng)10個(gè)像素

voidkeyEvent::keyPressEvent(QKeyEvent*event)

//按下ctrl鍵移動(dòng)一個(gè)像素

if(event-modifiers()==Qt::ControlModifier){

if(event-key()==Qt::Key_Left){

m_startX=(m_startX-1)0m_startX:m_startX-1;

}elseif(event-key()==Qt::Key_Right){

m_startX=(m_startX+1+m_image.width())m_widthm_startX:m_startX+1;

}elseif(event-key()==Qt::Key_Up){

m_startY=(m_startY-1)0m_startY:m_startY-1;

}elseif(event-key()==Qt::Key_Down){

m_startY=(m_startY+1+m_image.height())m_heightm_startY:m_startY+1;

}

}else{

//調(diào)整圖片左上角的位置到網(wǎng)格頂點(diǎn)

m_startX=m_startX+m_startX%m_step;

m_startY=m_startY+m_startY%m_step;

if(event-key()==Qt::Key_Left){

m_startX=(m_startX-m_step)0m_startX:m_startX-m_step;

}elseif(event-key()==Qt::Key_Right){

m_startX=(m_startX+m_step+m_image.width())m_widthm_startX:m_startX+m_step;

}elseif(event-key()==Qt::Key_Up){

m_startY=(m_startY-m_step)0m_startY:m_startY-m_step;

}elseif(event-key()==Qt::Key_Down){

m_startY=(m_startY+m_step+m_image.height())m_heightm_startY:m_startY+m_step;

}

}

drawPix();

//刷新圖片的位置

update();//觸發(fā)窗口重繪,執(zhí)行paintEvent();

}

重寫(xiě)QWidget類(lèi)繪制事件

繪制事件觸發(fā)的條件:(查閱Qt幫助文檔)

1、repaint()orupdate()wasinvoked,

2、thewidgetwasobscuredandhasnowbeenuncovered,or

3、manyotherreasons.

voidkeyEvent::pain

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論