1. 程式人生 > 其它 >QT 使用paintEvent繪畫圖片移動

QT 使用paintEvent繪畫圖片移動

目的

加入資源圖片,然後利用畫家 p a i n t e r painter painter畫出這幅圖片

畫完之後,設定定時器讓圖片慢慢移動。

Ⅰ.加入資源圖片

首先複製你需要的檔案,新增的檔案目錄下

然後右鍵 Q T QT QT總檔案, a d d n e w add\ new addnew,然後選擇 Q T QT QT,選擇 Q t R e s o u r c e F i l e Qt\ Resource\ File QtResourceFile即可

給資原始檔新增字首為 / / /,新增檔案即可

Ⅱ.畫圖片,控制移動

void Widget::paintEvent(QPaintEvent *
e) { QPainter painter(this); painter.drawPixmap(posx,0,100,170,QPixmap(":/IMAGE/jiangshi.jpeg")); if( --posx==0 ) posx = 800; }

使用 d r a w P i x m a p drawPixmap drawPixmap方法畫,每次把橫座標減去一

W i d g e t . h Widget.h Widget.h如下

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include
<QPainter>
QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); void paintEvent(QPaintEvent *event); int posx = 700; ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H

W i d g e t . c p p Widget.cpp Widget.cpp如下


#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QTimer>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer *timer1 = new QTimer(this);
    timer1->start(30);
    connect(timer1,&QTimer::timeout,[=]()
    {
        update();
    });
}

void Widget::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.drawPixmap(posx,0,100,170,QPixmap(":/IMAGE/jiangshi.jpeg"));
    if( --posx==0 ) posx = 800;
}


Widget::~Widget()
{
    delete ui;
}