91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Qt鍵盤事件實現圖片在窗口上下左右移動

發布時間:2022-08-26 14:40:58 來源:億速云 閱讀:300 作者:iii 欄目:開發技術

今天小編給大家分享一下怎么用Qt鍵盤事件實現圖片在窗口上下左右移動的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、項目內容:

新建桌面應用程序testKeyEvent,類名KeyEvent,基類QWidget,通過重寫鍵盤事件到達操作的鍵盤的時候窗口中的圖片上下左右移動,類似QtCreator設計模式下通過按鍵擺放部件時的效果。

二、實現細節

  • keyevent.h內容:

#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();         //自定義成員函數用來在pixmap上繪制網格線和圖片
protected:

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

private:
    Ui::keyEvent *ui;
    QPixmap *m_pix;
    QImage m_image;
    int m_startX;   //圖標頂點的位置
    int m_startY;
    int m_width;    //界面的寬度和高度
    int m_height;
    int m_step;     //圖片移動的步長

};
#endif // KEYEVENT_H
  • 構造函數:(初始化窗口大小、pximap、加載圖片、要顯示圖片左上角的坐標)

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"); //當前工作目錄默認Debug目錄下,car.png在上一級目錄下
    m_startX=100;
    m_startY=100;
    m_step=20;
    drawPix();
}
  • drawPix():定義Painter對象,并設置畫筆(虛線),m_pix作為繪圖設備,在上面繪制網格虛線,還有圖片的位置信息

void keyEvent::drawPix()
{
    m_pix->fill(Qt::white);
    QPainter painter(this);
    QPen pen(Qt::DotLine); //虛線

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

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

    }
    //按照步長畫橫向的網格虛線
    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+方向鍵一次圖片移動一個像素的距離
2、普通方向鍵一次移動步長(m_step:20像素)的距離,ui界面下默認一次移動10個像素

void keyEvent::keyPressEvent(QKeyEvent *event)
{
    //按下ctrl鍵移動一個像素
    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{
        //調整圖片左上角的位置到網格頂點
        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();//觸發窗口重繪 ,執行paintEvent();

}
  • 重寫QWidget類繪制事件

繪制事件觸發的條件:(查閱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對象,設置窗口為繪圖設備,在窗口繪制pixmap
    QPainter painter;
    painter.begin(this);//繪圖設備為窗口
    painter.drawPixmap(QPoint(0,0),*m_pix);
    painter.end();


}

三、效果

可在任意位置移動小車

怎么用Qt鍵盤事件實現圖片在窗口上下左右移動

怎么用Qt鍵盤事件實現圖片在窗口上下左右移動

怎么用Qt鍵盤事件實現圖片在窗口上下左右移動

以上就是“怎么用Qt鍵盤事件實現圖片在窗口上下左右移動”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

英德市| 泽库县| 长垣县| 苏州市| 道孚县| 宁波市| 乌鲁木齐市| 龙井市| 凤冈县| 嵩明县| 望都县| 沙河市| 武冈市| 亚东县| 西贡区| 静宁县| 阳曲县| 绵竹市| 开鲁县| 南部县| 宜城市| 财经| 宜都市| 黔江区| 庄河市| 固阳县| 清新县| 贺兰县| 济源市| 高邮市| 琼海市| 白水县| 比如县| 江油市| 石阡县| 青铜峡市| 德安县| 孟津县| 闻喜县| 蒙山县| 龙海市|