QTウィンドウ描画、描画イベントQPaintEventの書き換え

ウィンドウで描画している場合は、描画イベント内で自動的に呼び出される描画イベントに実装する必要があります。ウィンドウを再描画する必要がある場合(ステータス変更)
widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
    
    
class Widget;
}
class Widget : public QWidget
{
    
    
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    Ui::Widget *ui;
    int x;
protected:
    //重写绘图事件,虚函数
    //如果在窗口绘图,必须放在绘图事件里实现
    //绘图事件内部自动调用,窗口需要重绘的时候(状态改变)
    void paintEvent(QPaintEvent *);
private slots:
    void on_pushButton_clicked();
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<QPen>
#include<QBrush>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);
    x=0;
}
Widget::~Widget()
{
    
    
    delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
    
    
    //创建画家对象,并指定当前窗口为绘图设备
    QPainter p(this);

    //设置背景图片,../是上一级文件夹
    //p.drawPixmap(0,0,width(),height(),QPixmap("../images/bg.jpg"));
    //另一种写法,rect()获取矩形区域
    //p.drawPixmap(rect(),QPixmap("../images/bg.jpg"));
    //定义画笔
    QPen pen;
    pen.setWidth(5);//设置画笔宽度
    //pen.setColor(Qt::red);//设置画笔颜色
    pen.setColor(QColor(14,9,234));//RGB设置颜色
    pen.setStyle(Qt::DashLine);//设置风格(虚线)
    //定义画刷
    QBrush brush;
    brush.setColor(Qt::red);//设置颜色
    brush.setStyle(Qt::Dense1Pattern);//设置样式
    //把画刷交给画家
    p.setBrush(brush);
    //把画笔交给画家
    p.setPen(pen);
    //画直线
    p.drawLine(50,50,150,50);
    p.drawLine(50,50,50,150);
    //画矩形
    p.drawRect(150,150,100,50);

    //画圆形
    p.drawEllipse(QPoint(150,150),50,25);
    p.drawPixmap(x,200,80,80,QPixmap("../images/xiaolian.jpg"));
}
void Widget::on_pushButton_clicked()
{
    
    
    x += 20;
    if(x > width())
    {
    
    
        x=0;
    }
    //刷新窗口,让整个窗口重绘
    //间接调用paintEvent();
    update();
}

おすすめ

転載: blog.csdn.net/weixin_40355471/article/details/110389281