QT 使用paintEvent繪畫圖片移動
阿新 • • 發佈:2021-01-24
目的
加入資源圖片,然後利用畫家 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;
}