调用QPainter的接口来绘制一些基本的图形
头文件:
1 #include <QMainWindow> 2 #include <QPainter> 3 4 namespace Ui { 5 class MainWindow; 6 } 7 8 class MainWindow : public QMainWindow 9 { 10 Q_OBJECT 11 12 public: 13 explicit MainWindow(QWidget *parent = 0); 14 ~MainWindow(); 15 16 private: 17 void paintEvent(QPaintEvent *event); 18 19 private: 20 Ui::MainWindow *ui; 21 int m_type; 22 };
源文件:
1 #include <QRegExp> 2 #include <QPixmap> 3 #include "mainwindow.h" 4 #include "ui_mainwindow.h" 5 6 MainWindow::MainWindow(QWidget *parent) : 7 QMainWindow(parent), 8 ui(new Ui::MainWindow), 9 m_type(1) 10 { 11 ui->setupUi(this); 12 } 13 14 MainWindow::~MainWindow() 15 { 16 delete ui; 17 } 18 19 void MainWindow::paintEvent(QPaintEvent *event) 20 { 21 Q_UNUSED(event) 22 QPainter painter(this); 23 24 if(m_type == 1) // 绘制文本 25 { 26 painter.setPen(Qt::blue); 27 QFont font; 28 font.setFamily("Microsoft YaHei"); 29 font.setPointSize(50); 30 font.setItalic(true); 31 font.setBold(true); 32 painter.setFont(font); 33 painter.drawText(rect(), Qt::AlignCenter, QString::fromLocal8Bit("Qt")); 34 } 35 else if(m_type == 2) // 绘制直线 36 { 37 painter.setRenderHint(QPainter::Antialiasing, true); 38 painter.setPen(Qt::blue); 39 painter.drawLine(QPointF(0, height()), QPointF(width() / 2, height() / 2)); 40 } 41 else if(m_type == 3) // 绘制矩形 42 { 43 painter.setRenderHint(QPainter::Antialiasing, true); 44 painter.setPen(QPen(Qt::blue, 2)); 45 painter.setBrush(Qt::green); 46 painter.drawRect(50, 50, 160, 100); 47 } 48 else if(m_type == 4) // 绘制弧线 49 { 50 QRectF rect(90.0, 90.0, 80.0, 90.0); 51 int startAngle = 30 * 16; 52 int spanAngle = 120 * 16; 53 painter.setRenderHint(QPainter::Antialiasing, true); 54 painter.setPen(QPen(Qt::blue, 2)); 55 painter.drawArc(rect, startAngle, spanAngle); 56 57 } 58 else if(m_type == 5) // 绘制椭圆,绘制圆 59 { 60 painter.setRenderHint(QPainter::Antialiasing, true); 61 painter.setPen(QPen(Qt::blue, 2)); 62 painter.drawEllipse(QPointF(120, 160), 50, 20); 63 painter.setBrush(Qt::green); 64 painter.drawEllipse(QPointF(120, 140), 40, 40); 65 } 66 else if(m_type == 6) // 绘制多边形 67 { 68 painter.setRenderHint(QPainter::Antialiasing, true); 69 painter.setPen(Qt::blue); 70 static const QPointF points[6] = {QPointF(10, 40), QPointF(60, 190), QPointF(110, 160), QPointF(220, 180), QPointF(270, 120), QPointF(220, 280)}; 71 painter.drawPolygon(points, 6); 72 } 73 else if(m_type == 7) // 绘制图片 74 { 75 painter.setRenderHint(QPainter::Antialiasing, true); 76 painter.drawPixmap(rect(), QPixmap(":/images/pic.png")); 77 } 78 else if(m_type == 8) // 绘制圆角矩形 79 { 80 painter.setRenderHint(QPainter::Antialiasing, true); 81 painter.setPen(QPen(Qt::blue,2,Qt::SolidLine)); 82 painter.drawRoundRect(80,80,210,160,50,50); 83 } 84 else if(m_type == 9) // 绘制扇形 85 { 86 painter.setRenderHint(QPainter::Antialiasing, true); 87 painter.setPen(QPen(Qt::green,2,Qt::SolidLine)); 88 painter.drawPie(80,80,210,160,0,500); 89 } 90 else if(m_type == 10) // 绘制弦 91 { 92 painter.setRenderHint(QPainter::Antialiasing, true); 93 painter.setPen(QPen(Qt::green,2,Qt::SolidLine)); 94 painter.drawChord(80,80,210,160,500,1000); 95 } 96 }