Qt如何在QTabWidget上绘图


  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 }

笔者的成功案例:

笔者摸索了很久,希望能帮助到某些人。

					


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM