绘图:
QPainter->QPaintEngine->QPaintDevice
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 = 0);
~Widget();
protected:
//重写绘图事件 虚函数
//如果在窗口绘图 必须放在绘图事件里实现
//绘图事件内部自动调用 窗口需要重绘的时候(状态改变)
void paintEvent(QPaintEvent *event);
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
int x;
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<Qpen>
#include<QBuffer>
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); //方法1
//方法2
QPainter p; //创建画家对象
p.begin(this); //指定当前窗口为绘图设备
//绘图操作
//p.drawxxx();
//画背景图
// p.drawPixmap(0,0,width(),height(),QPixmap("../Image/1.png"));
p.drawPixmap(rect(),QPixmap("../Image/2.png"));
//定义画笔
QPen pen;
pen.setWidth(5); //设置线宽
//pen.setColor(Qt::red); //设置颜色
pen.setColor(QColor(234,9,14)); //通过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);
//画圆形
p.drawEllipse(QPoint(150,150),50,25);
//画笑脸
p.drawPixmap(x,180,80,80,QPixmap("../Image/1.png"));
p.end();
}
//点击按钮 图片右移20个像素点
void Widget::on_pushButton_clicked()
{
x+=20;
if(x>width())
{
x=0;
}
//刷新窗口 让窗口重绘 整个窗口都刷新
update(); //间接调用paintEvent()
}
main.cpp:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.ui:
结果:
点击按钮,图片向右移动
QBitmap(只有两种颜色)->QPixmap(显示彩色)
两者的区别:
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 = 0);
~Widget();
protected:
//重写绘图事件
//如果给窗口绘图 一定要在paintEvent()绘图
void paintEvent(QPaintEvent *event);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp代码:
#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<QBitmap>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p(this);
p.drawPixmap(0,0,QPixmap("../Image/2.png"));
p.drawPixmap(200,0,QBitmap("../Image/2.png"));
//QPixmap画图
QPixmap pixmap;
pixmap.load("../Image/2.png");
p.drawPixmap(0,200,pixmap);
//QBitmap画图
QBitmap bitmap;
bitmap.load("../Image/2.png");
p.drawPixmap(200,200,bitmap);
}
main.cpp:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}