实现图案抗锯齿
使用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();
//重写绘图事件
void paintEvent(QPaintEvent *);
//x坐标位置
int posX;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "QPainter"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->resize(500,400);
//点击按钮,移动图片
posX=0;
connect(ui->btn_move,&QPushButton::clicked,[=](){
posX += 50;
//手动调用绘图事件
update();
});
}
//重写绘图事件
void Widget::paintEvent(QPaintEvent *){
QPainter painter(this); //this指代绘图设备,画家想当前窗口绘图
// //高级绘图
painter.drawEllipse(QPoint(100,100),50,50);
//设置 抗锯齿
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(250,100),50,50);
painter.drawRect(QRect(20,20,50,50));
painter.translate(100,0);//移动画家
painter.save();//保存状态
painter.drawRect(QRect(20,20,50,50));
painter.translate(100,0);//移动画家
painter.restore();//恢复状态
painter.drawRect(QRect(20,20,50,50));
//画成品图案
QPixmap pix;
pix.load(":/imgs/qt.jpg");
//当前窗口的宽度:this->width
if(posX > this->width()){
posX=-pix.width();
}
painter.drawPixmap(posX,0,pix);
// //基本绘图
// //画笔
// QPen pen(QColor(255,0,0));
// //设置画笔宽度
// pen.setWidth(3);
// //设置画笔风格
// pen.setStyle(Qt::DotLine);
// //画家使用画笔
// painter.setPen(pen);
// //画刷 可以 填充封闭的图案
// QBrush brush(Qt::cyan);
// //设置画刷风格
// brush.setStyle(Qt::CrossPattern);
// //画家使用画刷
// painter.setBrush(brush);
// //画线
// painter.drawLine(QPoint(0,0),QPoint(100,100));
// //画圆
// painter.drawEllipse(QPoint(100,100),50,50);//center x y
// //画矩形
// painter.drawRect(QRect(20,20,50,50)); //x y w h
// //画字
// painter.setFont(QFont("华文彩云",20));
// painter.drawText(QRect(0,200,150,100),"好好学习,天天向上");
}
Widget::~Widget()
{
delete ui;
}
图片自动移动实现:
增加代码:
使用定时器类,实现图片自动移动,使用update()更新画布
//实现让图片自动移动
QTimer *timer = new QTimer(this);
timer->start(10);
connect(timer,&QTimer::timeout,[=](){
posX ++;
update();
});