先来看看效果:
这是我在主窗口上绘制的一个图形,其中顶部和左边的灰线可以随着主窗口的重绘而跟着变化。
先来看看代码吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| class Widget : public QWidget { Q_OBJECT
public: Widget(QWidget *parent = nullptr); ~Widget();
private: Ui::Widget *ui; protected: void paintEvent(QPaintEvent *event); };
#include "widget.h" #include "ui_widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); }
Widget::~Widget() { delete ui; }
void Widget::paintEvent(QPaintEvent *event) { QPainter p; QPen pen; p.begin(this); pen.setWidth(10); pen.setColor(QColor(200, 200, 200)); pen.setStyle(Qt::DashLine); p.setPen(pen); p.drawLine(10, 10, width(), 10); p.drawLine(10, 10, 10, height()); p.drawRect(100, 100, 300, 60); p.setBrush(Qt::Dense1Pattern); p.drawEllipse(QPoint(150, 130), 30, 30); p.end(); }
|
这里我主要用到了paintEvent事件。它在控件被重绘时触发。千万不要在这里面调用重绘函数,因为这将导致其一直重绘。
这次我的注释很全,所以直接看注释即可。
然后就是绘图设备是什么东西了,在我眼里,绘图设备就是绘图的目标,因为解释起来太麻烦了,所以直接看代码吧,看完就明白了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); QPixmap xmap(200, 200); xmap.fill(Qt::white); QPainter p; p.begin(&xmap); QPen pen; pen.setWidth(10); p.setPen(pen); p.drawLine(10, 20, 30, 40); p.end(); xmap.save("./new.jpg"); }
|
我在构造函数里添加了一段代码,其功能是绘制一个图像并保存在统计目录下的名为new.jpg的文件中。
这是画出来的图像:
根据以上代码我们可以得知,”绘图设备”就是”画在哪里”的意思。
本篇完。