下面的代码段有:画家、画笔、笔刷、画图形以及文字
void Widget::paintEvent(QPaintEvent *event) //自动调用
{
//创建一个画家类
QPainter painter(this);
//创建一个画笔类
QPen pen(Qt::gray);
pen.setStyle(Qt::CustomDashLine);
//让画家拿起pen画笔画
painter.setPen(pen);
// //创建一个笔刷类
// QBrush brush(Qt::gray);
// painter.setBrush(brush);
//画直线
painter.drawLine(QPoint(0,0),QPoint(200,150));
painter.drawLine(0,300,200,150);
painter.drawLine(QPoint(400,0),QPoint(200,150));
painter.drawLine(200,150,400,300);
//画矩形
painter.drawRect(QRect(100,75,200,150));
for(int i=1;i<=25;i++)
{
painter.drawRect(100+i*2,75+i*2,200-i*4,150-i*4);
}
//画椭圆,圆是一种特殊的椭圆
painter.drawEllipse(QPoint(200,150),100,75);
//画文字
painter.drawText(QRect(150,50,150,25),"好好学习,天天向上");
}
下面的代码段有:设置抗锯齿、移动画家、保存画家位置、返回保存的画家位置
移动画家就相当于改变了画布的原始坐标原点
绿色的圆是设置抗锯齿后的,相比于红色的圆更柔和
x1位置是画家第一次移动到的位置,此时保存画家的位置,x2是第二次移动到的位置,此时调用restore()函数,返回x1位置,矩形1是在初始位置画的,矩形2是在x1位置上画的,矩形3是在x2位置画的,矩形4是在返回x1位置画的
void Widget::paintEvent(QPaintEvent *event)
{
//高级设置
QPainter painter(this);
QPen pen1(Qt::red);
QPen pen2(Qt::green);
painter.setPen(pen1);
painter.drawEllipse(QPoint(200,150),100,100);
//设置抗锯齿,画家细心地画,效率要比没有抗锯齿的低
painter.setPen(pen2);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,150),150,150);
painter.drawRect(100,50,100,100);
//移动画家
painter.setPen(pen1);
painter.translate(100,0);
painter.drawText(QRect(0,0,20,20),"x1");
//保存位置
painter.save();
painter.drawRect(100,50,100,100);
painter.translate(100,100);
painter.drawText(QRect(0,0,20,20),"x2");
painter.drawRect(100,50,100,100);
//返回保存过的位置
painter.restore();
painter.setPen(pen2);
painter.drawRect(-100,150,100,100);
//给矩形标号
painter.setPen(Qt::blue);
QFont font;
font.setPointSize(15);
painter.setFont(font);
painter.drawText(QRect(0,75,50,25),"1");
painter.drawText(QRect(100,75,50,25),"2");
painter.drawText(QRect(200,175,50,25),"3");
painter.drawText(QRect(-15,175,50,25),"4");
}
下面代码段有:利用画家在窗口插入图片文件,并利用定时器让图片移动
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer *timer=new QTimer(this);
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
static int time=0;
time++;
if(time>0&&time<=10)
{
pos+=40; //pos在头文件类中已经定义,并赋值为0(在c++中不能给成员变量赋值)
update(); //更新绘图事件
}
else if(time>10&&time<=20)
{
pos-=40;
update();
if(time==20)
{
time=0;
}
}
});
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(pos,100,200,200,QPixmap(":/a.PNG"));
}