QT简单的进行绘图,手动更新窗口

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    /*
     * 重写绘图事件,虚函数
     * 如果在窗口绘图必须放在绘图事件里面实现。
     * 窗口需要重绘的时候,绘图事件便会自动调用
     */
    void paintEvent(QPaintEvent *event) ;
private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    int x ; //物体移动的坐标为x和y
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include  //画家
#include    //画笔
#include 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;

    x = 0 ;//x初始坐标为0
}

/*绘图最好不要做太过复杂的数据处理,因为绘图事件随时都有可能会调用**/
void Widget::paintEvent(QPaintEvent *event)
{
    //定义画家
    QPainter p(this) ; //因为this -> QWidget 继承于QPainter
    //画背景图
    //1、 p.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/new/prefix1/D:/Image/123456.jpg"));
    //2、 p.drawPixmap(this->rect(),QPixmap(":/new/prefix1/D:/Image/123456.jpg"));

    //定义画笔  画笔中设置画笔的宽度,颜色,画线风格
    QPen pen ;
    pen.setWidth(5); //设定画笔宽度
    //pen.setColor(Qt::gray); //设置颜色(常规颜色设置)
    pen.setColor(QColor(14,9,234)); //rgb设置颜色(特殊颜色设置)
    pen.setStyle(Qt::DashLine); //设置画线风格,如散点等等....

    //把画笔交给画家
    p.setPen(pen);

    //画直线 ,因为直线不够粗所以此时借助画笔
    p.drawLine(50,50,150,50);
    p.drawLine(50,50,50,150);



    //创建画刷
    QBrush brush ;
    brush.setColor(Qt::red); //设置颜色
    brush.setStyle(Qt::Dense1Pattern); //设置样式

    //画刷给画家
    p.setBrush(brush);

    //画矩形
    p.drawRect(150,150,100,50); //参数为xy w h

    //画圆形
    p.drawEllipse(QPoint(150,150),50,25); 
    
    /*注意要先把画刷给画家在画图形,画刷才会进行填充**/

    //画滑稽
    p.drawPixmap(x,250,80,80,QPixmap(":/new/prefix1/D:/Image/funny.jpg"));
}

void Widget::on_pushButton_clicked()
{
    x += 20 ; //每按一次按钮 就横移一格
    if(x > this->width()) //若超过了宽度则x回到原点
    {
        x = 0 ;
    }

    //刷新窗口整个窗口进行重绘
   update(); // 按完按钮便可调用painEvent 事件
}

运行界面如下:

QT简单的进行绘图,手动更新窗口_第1张图片

你可能感兴趣的:(QT,qt,gui,c++)