Qt绘图事件必须在paintEvent事件下绘图,这样导致我们在向Qt设计师界面上拖拽的控件绘图时,造成了很大的麻烦。
我们不能在拖拽的控件上写paintEvent函数,但是可以自定义一个类,继承某一个控件,在里面写绘图事件函数,但是这个非常麻烦,
此时我们需要借用Qt事件过滤器函数eventFilter(QObject * watched, QEvent * event)
在Qt助手上,我们可以查看该函数,并且有该函数的示例说明:
Qt帮助文档的示例代码:
这里需要说明的是,如果你想调用Qt事件过滤函数这一行代码必不可少: 1 ui->tab1->installEventFilter(this);
笔者将放入自己写的部分代码:
1 bool MainWidget::eventFilter(QObject *watched, QEvent *event)
2 {
3 if(watched == ui->DrawCircuit && event->type() == QEvent::Paint)
4 DrawCircuitPaint();
5 return QWidget::eventFilter(watched, event);
6 }
7 void MainWidget::DrawCircuitPaint()
8 {
9 QPainter painter(ui->DrawCircuit);
10
11 //指定画笔
12 QPen pen(QColor(0, 0, 255));
13 //设置笔宽
14 pen.setWidth(5);
15 painter.setPen(pen);
16
17 //绘制长方体
18 painter.drawLine(QPoint(200, 50), QPoint(200, 650));
19 painter.drawLine(QPoint(200, 50), QPoint(600, 50));
20 painter.drawLine(QPoint(600, 50), QPoint(600, 650));
21 painter.drawLine(QPoint(200, 650), QPoint(600, 650));
22
23 pen.setColor(QColor(0, 0, 0));
24 pen.setWidth(3);
25 painter.setPen(pen);
26
27 //中间竖杠
28 painter.drawLine(QPoint(380, 80), QPoint(380, 300));
29 painter.drawLine(QPoint(380, 350), QPoint(380, 620));
30
31 //100-1
32 painter.drawLine(QPoint(150, 200), QPoint(250, 200));
33 painter.drawLine(QPoint(300, 200), QPoint(380, 200));
34
35
36 //100-2
37 painter.drawLine(QPoint(150, 500), QPoint(250, 500));
38 painter.drawLine(QPoint(300, 500), QPoint(380, 500));
39
40 }
笔者的成功案例:
笔者摸索了很久,希望能帮助到某些人。
来源:oschina
链接:https://my.oschina.net/u/4321424/blog/3714107