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); //创建画家对象,并指定当前窗口为绘图设备
//绘图操作
//方法2
QPainter p; //创建画家对象
p.begin(this);//指定当前窗口为绘图设备
//抗锯齿,使线更光滑
//绘图抗锯齿 QPainter::Antialiasing
//绘制的字体抗锯齿 QPainter::TextAntialiasing
p.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”才行。