
QPainter要在QPaintDevice里绘图。
class MainWindow : public QMainWindow{public:MainWindow();protected://重写绘图事件,虚函数//如果在窗口绘图,必须放在绘图事件里实现//绘图事件内部自动调用,即窗口需要重绘的时候(状态改变),如放大缩小窗口void paintEvent(QPaintEvent *event);private:QTextEdit *textEdit;};MainWindow::MainWindow(){}bool MainWindow::paintEvent(QPaintEvent *event){//方法1//QPainter p(this); //创建画家对象,并指定当前窗口为绘图设备//绘图操作//方法2QPainter p; //创建画家对象p.begin(this);//指定当前窗口为绘图设备//抗锯齿,使线更光滑//绘图抗锯齿 QPainter::Antialiasing//绘制的字体抗锯齿 QPainter::TextAntialiasingp.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);//绘图操作//绘制背景图p.drawPixmap(0,0,width(),heigth(),QPixmap("../Image/bk.jpg"));//定义画笔QPen pen;pen.setWidth(5);//设置线宽//pen.setColor(Qt::red); //设置颜色pen.setColor(QColor(0,0,0)); //rgb设置颜色pen.setStyle(Qt::DashLine);//设置线样式//把画笔交给画家p.setPen(pen);//画直线p.drawLine(50,50,150,50);//画矩形p.drawRect(150,150,100,50);//创建画刷对象QBrush brush;//brush.setColor(Qt::red); //设置颜色brush.setColor(QColor(0,0,0)); //rgb设置颜色brush.setStyle(Qt::DenselPattern);//设置样式//把画刷交给画家p.setBrush(brush); //这样就填充了//画圆p.drawEllipse(QPoint(150,150),50,25);//设置字体p.setFont(QFont("Arial",30));//画文字p.drawText(QPoint(150,150), "文字");//画字体p.drawText(QRectF(20, 30, 100, 100), "这是一行文字");p.end();}void ::on_pushButton_clicked(){//刷新窗口,让窗口重绘,整个窗口都刷新update(); //间接调用paintEvent()//不要放在paintEvent()中}
定义画笔
- 设置线宽 setWidth();
绘图操作
- 绘制背景图 drawPixmap(0,0,width(),heigth(),QPixmap(“../Image/bk.jpg”));
- 画直线 drawLine(50,50,150,50);
- 画圆 drawEllipse(QPoint(150,150),50,25);
注意事项
Qt新版本往往会带来一些头文件的更新,比如以前使用QPainter绘制,不需要额外包含QPainterPath头文件,而5.15版本开始就需要显示主动引入#include “qpainterpath.h”才行。
