QPainter使用小结 - 图1
    QPainter要在QPaintDevice里绘图。

    1. class MainWindow : public QMainWindow
    2. {
    3. public:
    4. MainWindow();
    5. protected:
    6. //重写绘图事件,虚函数
    7. //如果在窗口绘图,必须放在绘图事件里实现
    8. //绘图事件内部自动调用,即窗口需要重绘的时候(状态改变),如放大缩小窗口
    9. void paintEvent(QPaintEvent *event);
    10. private:
    11. QTextEdit *textEdit;
    12. };
    13. MainWindow::MainWindow()
    14. {
    15. }
    16. bool MainWindow::paintEvent(QPaintEvent *event)
    17. {
    18. //方法1
    19. //QPainter p(this); //创建画家对象,并指定当前窗口为绘图设备
    20. //绘图操作
    21. //方法2
    22. QPainter p; //创建画家对象
    23. p.begin(this);//指定当前窗口为绘图设备
    24. //抗锯齿,使线更光滑
    25. //绘图抗锯齿 QPainter::Antialiasing
    26. //绘制的字体抗锯齿 QPainter::TextAntialiasing
    27. p.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
    28. //绘图操作
    29. //绘制背景图
    30. p.drawPixmap(0,0,width(),heigth(),QPixmap("../Image/bk.jpg"));
    31. //定义画笔
    32. QPen pen;
    33. pen.setWidth(5);//设置线宽
    34. //pen.setColor(Qt::red); //设置颜色
    35. pen.setColor(QColor(0,0,0)); //rgb设置颜色
    36. pen.setStyle(Qt::DashLine);//设置线样式
    37. //把画笔交给画家
    38. p.setPen(pen);
    39. //画直线
    40. p.drawLine(50,50,150,50);
    41. //画矩形
    42. p.drawRect(150,150,100,50);
    43. //创建画刷对象
    44. QBrush brush;
    45. //brush.setColor(Qt::red); //设置颜色
    46. brush.setColor(QColor(0,0,0)); //rgb设置颜色
    47. brush.setStyle(Qt::DenselPattern);//设置样式
    48. //把画刷交给画家
    49. p.setBrush(brush); //这样就填充了
    50. //画圆
    51. p.drawEllipse(QPoint(150,150),50,25);
    52. //设置字体
    53. p.setFont(QFont("Arial",30));
    54. //画文字
    55. p.drawText(QPoint(150,150), "文字");
    56. //画字体
    57. p.drawText(QRectF(20, 30, 100, 100), "这是一行文字");
    58. p.end();
    59. }
    60. void ::on_pushButton_clicked()
    61. {
    62. //刷新窗口,让窗口重绘,整个窗口都刷新
    63. update(); //间接调用paintEvent()
    64. //不要放在paintEvent()中
    65. }

    定义画笔

    • 设置线宽 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”才行。