环境:QT5.5.1+MinGW+windows8.1
1.首先建立一个工程,我选用的是mianwindow。在头文件mainwindow.h中的public下加入
//绘图事件,系统默认会调用它,我们只需要实现它
void paintEvent(QPaintEvent *);
2.在mainwindow.c文件中实现你想绘制的图案,这里就列举了一些常用的一些接口,可以自己去发挥。
void MainWindow::paintEvent(QPaintEvent *)
{
//painter是画家,this是绘图设备,就是指QWidget
QPainter painter(this);
//设置画笔颜色
QPen pen(QColor(0,0,0));
//设置笔宽度
pen.setWidth(1);
// //设置笔风格
// pen.setStyle(Qt::DotLine);
//给画家拿笔
painter.setPen(pen);
//画刷填充颜色
QBrush brush(QColor(105,105,105));
//设置画刷风格
brush.setStyle(Qt::Dense4Pattern);
//给画家拿刷子
painter.setBrush(brush);
//如果出屏幕,强制变回10
if(posX > this->width())
{
posX = 0;
}
//画图片
painter.drawRect(QRect(10,10,600,63));
painter.drawPixmap(posX,10,QPixmap(":/new/prefix1/image/盘煤小车(小图标).bmp"));
// ///高级设置
// //设置抗锯齿,精度越高,效率越低
// painter.setRenderHint(QPainter::Antialiasing);
// //相对位置移动
// painter.drawRect(QRect(20,20,50,50));
// painter.translate(QPoint(100,0));
// //保存状态
// painter.save();
// painter.drawRect(QRect(20,20,50,50));
// //取出状态,后面画的就相对于该状态前的位置
// painter.restore();
// //画线
// painter.drawLine(QPoint(0,0),QPoint(100,100));
// //画圆
// painter.drawEllipse(QPoint(100,100),100,100);
// //画矩形
// painter.drawRect(QRect(10,10,50,50));
// //设置字体
// painter.setFont(QFont("Arial", 15));
// //画字体
// painter.drawText(QRect(10,200,200,50),Qt::AlignCenter,"字在这儿");
}
在构造函数里面有个功能:按下按钮后,图片会右移设置的距离
connect(ui->pushButton,&QPushButton::clicked,this,[=](){
posX += 50;
//手动调用绘图事件,在帮助里面搜repaint
update();
});
这里就会有一个问题,一直按下按钮,图片会一直右移直到出画,你就看不到它了,这肯定不行了,所以在paintEvent函数中有这样一行代码,可以限制它。
//如果出屏幕,强制变回10
if(posX > this->width())
{
posX = 0;
}
有关于图案更新的官方介绍: