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