#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include #include #include #include #include #include bool enable = false; bool drawing = false; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->setProperty("canMove", false); resize(600, 500); //窗口大小设置为600*500 pix = QPixmap(600, 500); pix.fill(Qt::white); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_styCor_triggered() //边框颜色 { QPainter pp(&pix); // 根据鼠标指针前后两个位置就行绘制直线 pp.drawLine( lastPoint, endPoint); // 让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线 lastPoint = endPoint; QPainter painter(this); painter.drawPixmap(0, 0, pix); } void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawLine(QPoint(100, 100), QPoint(200, 200)); QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin); painter.setPen(pen); QRectF rect(170.0, 140.0, 180.0, 60.0); int startAngle = 30 * 16; int spanAngle = 120 * 16; painter.drawArc(rect, startAngle, spanAngle); pen.setWidth(1); pen.setStyle(Qt::SolidLine); painter.setPen(pen); painter.drawRect(260, 220, 250, 240); QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern); painter.setBrush(brush); painter.drawEllipse(220, 220, 250, 150); static const QPointF points[4] = { QPointF(270.0, 180.0), QPointF(290.0, 110.0), QPointF(350.0, 130.0), QPointF(390.0, 170.0)}; painter.drawPolygon(points, 4); painter.fillRect(QRect(10, 100, 150, 20), QBrush(Qt::darkYellow)); painter.eraseRect(QRect(50, 0, 50, 120)); } // void MainWindow::paintEvent(QPaintEvent *event) { // if (enable) // switch (drawStatus) { // case line: // QPainter pp(&pix); // 根据鼠标指针前后两个位置就行绘制直线 // pp.drawLine( // lastPoint, // endPoint); // // 让前一个坐标值等于后一个坐标值,这样就能实现画出连续的线 // enable = false; // } // QPainter painter(this); // painter.drawPixmap(0, 0, pix); // drawStatus = idle; //} void MainWindow::drawLineTriger() { drawStatus = line; } void MainWindow::on_drawLine_triggered() { enable = true; drawStatus = line; } void MainWindow::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) //鼠标左键按下 if (drawing) { endPoint = event->pos(); drawing = false; enable = true; update(); } else { drawing = true; lastPoint = event->pos(); } }