最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng)

 更新時(shí)間:2022年08月18日 16:05:35   作者:喝水怪~  
這篇文章主要為大家詳細(xì)介紹了Qt鍵盤事件實(shí)現(xiàn)圖片在窗口上下左右移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

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

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

  • keyevent.h內(nèi)容:
#ifndef KEYEVENT_H
#define KEYEVENT_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class keyEvent; }
QT_END_NAMESPACE

class keyEvent : public QWidget
{
? ? Q_OBJECT

public:
? ? keyEvent(QWidget *parent = nullptr);
? ? ~keyEvent();
? ? void drawPix(); ? ? ? ? //自定義成員函數(shù)用來(lái)在pixmap上繪制網(wǎng)格線和圖片
protected:

? ? void keyPressEvent(QKeyEvent *event) override; ? ? ?//重寫鍵盤按下事件
? ? void paintEvent(QPaintEvent *event) override; ? ? ? //重寫繪圖事件

private:
? ? Ui::keyEvent *ui;
? ? QPixmap *m_pix;
? ? QImage m_image;
? ? int m_startX; ? //圖標(biāo)頂點(diǎn)的位置
? ? int m_startY;
? ? int m_width; ? ?//界面的寬度和高度
? ? int m_height;
? ? int m_step; ? ? //圖片移動(dòng)的步長(zhǎng)

};
#endif // KEYEVENT_H
  • 構(gòu)造函數(shù):(初始化窗口大小、pximap、加載圖片、要顯示圖片左上角的坐標(biāo))
keyEvent::keyEvent(QWidget *parent)
? ? : QWidget(parent)
? ? , ui(new Ui::keyEvent)
{
? ? ui->setupUi(this);
? ? setWindowTitle("鍵盤事件");
? ? setAutoFillBackground(true);
? ? setFixedSize(512,256);
? ? m_width=size().width();
? ? m_height=size().height();

? ? m_pix=new QPixmap(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è)置畫筆(虛線),m_pix作為繪圖設(shè)備,在上面繪制網(wǎng)格虛線,還有圖片的位置信息
void keyEvent::drawPix()
{
? ? m_pix->fill(Qt::white);
? ? QPainter painter(this);
? ? QPen pen(Qt::DotLine); //虛線

? ? painter.begin(m_pix); ? //m_pix為繪圖設(shè)備
? ? painter.setPen(pen);

? ? //按照步長(zhǎng)畫縱向的網(wǎng)格虛線
? ? for(int i=m_step;i<m_width;i+=m_step){
? ? ? ? painter.drawLine(QPoint(i,0),QPoint(i,m_height));

? ? }
? ? //按照步長(zhǎng)畫橫向的網(wǎng)格虛線
? ? for(int j=m_step;j<m_height;j+=m_step){
? ? ? ? painter.drawLine(QPoint(0,j),QPoint(m_width,j));
? ? }
? ? painter.end();

? ? //畫圖片
? ? painter.begin(m_pix);
? ? painter.drawImage(QPoint(m_startX,m_startY),m_image);
? ? painter.end();
}
  • 重寫鍵盤事件

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

void keyEvent::keyPressEvent(QKeyEvent *event)
{
? ? //按下ctrl鍵移動(dòng)一個(gè)像素
? ? if(event->modifiers()==Qt::ControlModifier){
? ? ? ? if(event->key()==Qt::Key_Left){
? ? ? ? ? ? m_startX=(m_startX-1)<0?m_startX:m_startX-1;
? ? ? ? }else if(event->key()==Qt::Key_Right){
? ? ? ? ? ? m_startX=(m_startX+1+m_image.width())>m_width?m_startX:m_startX+1;
? ? ? ? }else if(event->key()==Qt::Key_Up){
? ? ? ? ? ? m_startY=(m_startY-1)<0?m_startY:m_startY-1;
? ? ? ? }else if(event->key()==Qt::Key_Down){
? ? ? ? ? ? m_startY=(m_startY+1+m_image.height())>m_height?m_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)<0?m_startX:m_startX-m_step;
? ? ? ? }else if(event->key()==Qt::Key_Right){
? ? ? ? ? ? m_startX=(m_startX+m_step+m_image.width())>m_width?m_startX:m_startX+m_step;
? ? ? ? }else if(event->key()==Qt::Key_Up){
? ? ? ? ? ? m_startY=(m_startY-m_step)<0?m_startY:m_startY-m_step;
? ? ? ? }else if(event->key()==Qt::Key_Down){
? ? ? ? ? ? m_startY=(m_startY+m_step+m_image.height())>m_height?m_startY:m_startY+m_step;
? ? ? ? }
? ? }
? ? drawPix(); ?//刷新圖片的位置
? ? update();//觸發(fā)窗口重繪 ,執(zhí)行paintEvent();

}
  • 重寫QWidget類繪制事件

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

1、repaint() or update() was invoked,
2、the widget was obscured and has now been uncovered, or
3、many other reasons.

void keyEvent::paintEvent(QPaintEvent *event)
{
? ? //定義Qpainter對(duì)象,設(shè)置窗口為繪圖設(shè)備,在窗口繪制pixmap
? ? QPainter painter;
? ? painter.begin(this);//繪圖設(shè)備為窗口
? ? painter.drawPixmap(QPoint(0,0),*m_pix);
? ? painter.end();


}

三、效果

可在任意位置移動(dòng)小車

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實(shí)現(xiàn)代碼

    C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C/C++ 獲取Windows系統(tǒng)的位數(shù)32位或64位的實(shí)現(xiàn)代碼的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言結(jié)構(gòu)體使用之鏈表

    C語(yǔ)言結(jié)構(gòu)體使用之鏈表

    這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體使用之鏈表,下面文章主要圍繞結(jié)構(gòu)體的概念和用法、結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針、包含結(jié)構(gòu)體的結(jié)構(gòu)體、結(jié)構(gòu)體搭建鏈表方法、結(jié)構(gòu)體及鏈表在產(chǎn)品應(yīng)用場(chǎng)景等多個(gè)主題展開鏈表的相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • C++ DLL實(shí)現(xiàn)循環(huán)播放音樂(lè)的示例詳解

    C++ DLL實(shí)現(xiàn)循環(huán)播放音樂(lè)的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C++ DLL實(shí)現(xiàn)循環(huán)播放音樂(lè)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2024-03-03
  • C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例

    C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例

    這篇文章主要為大家介紹了C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)快速排序圖文示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++ 使用new與delete需注意的原則

    C++ 使用new與delete需注意的原則

    這篇文章主要介紹了C++ 使用new與delete需注意的原則,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • 節(jié)序問(wèn)題:解析大小的端判定

    節(jié)序問(wèn)題:解析大小的端判定

    本篇文章是對(duì)大小的端判定進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中bitset位圖介紹及模擬實(shí)現(xiàn)

    C++中bitset位圖介紹及模擬實(shí)現(xiàn)

    位圖就是用每一位來(lái)存放某種狀態(tài),適用于海量數(shù)據(jù),本文就介紹一下C++中bitset位圖介紹及模擬實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-07-07
  • Windows 環(huán)境下使用 Qt 連接 MySQL

    Windows 環(huán)境下使用 Qt 連接 MySQL

    這篇文章主要介紹了Windows 環(huán)境下使用 Qt 連接 MySQL的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換

    C++超詳細(xì)講解強(qiáng)制類型轉(zhuǎn)換

    在C++語(yǔ)言中新增了四個(gè)關(guān)鍵字static_cast、const_cast、reinterpret_cast和dynamic_cast。這四個(gè)關(guān)鍵字都是用于強(qiáng)制類型轉(zhuǎn)換的
    2022-05-05
  • C++ 頭文件系列(set)詳解

    C++ 頭文件系列(set)詳解

    一般而言,每個(gè)C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數(shù)、數(shù)據(jù)接口聲明的載體文件,主要用于保存程序的聲明,而定義文件用于保存程序的實(shí)現(xiàn) 。
    2017-02-02

最新評(píng)論

甘洛县| 荣成市| 西青区| 宁乡县| 姜堰市| 赞皇县| 竹溪县| 屏东市| 始兴县| 图木舒克市| 合肥市| 会宁县| 盐源县| 甘泉县| 麦盖提县| 巨野县| 堆龙德庆县| 鄂伦春自治旗| 井冈山市| 南陵县| 文山县| 莎车县| 景洪市| 郯城县| 阿拉善盟| 万荣县| 云龙县| 中牟县| 兴化市| 台东市| 安福县| 云霄县| 涟水县| 新营市| 绥化市| 邵东县| 邮箱| 通化市| 宣威市| 积石山| 油尖旺区|