• 大小: 24KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: qt  画图  

资源简介

6.1 演示案例 【任务目标】 实现简单的绘图功能,并支持绘图数据的保存和打开等功能。 通过 Draw 菜单,由用户点击选择不同的图形,按下鼠标左键并拖动鼠标开始绘 图,松开鼠标后保存图形(线条、椭圆、矩形)数据,并更新屏幕显示。 File 菜单下定义文件的基本操作, New 菜单项用于新建绘图文件,如果上一 个文件修改了并没有保存,需要进行提示, Save 用于将绘图结果保存为磁盘文 件,实现持久化存储, Open 用于打开存盘的图形文件。 6.1.1 简单绘图版本

资源截图

代码片段和文件信息

#include “centerwidget.h“
#include
#include
#include “mainwindow.h“
#include
#include
CenterWidget::CenterWidget(QWidget *parent) :
    QWidget(parent){
    //lines.clear();
    //ellipses.clear();
    //rects.clear();
    shapes.clear();                    //////////////////////
    beginDraw=false;
    colorType=0;

    isModified=false;
    fileName=tr(““);
    mousePosLabel=new QLabel;
    mousePosLabel->setText(““);
    mousePosLabel->setFixedWidth(150);
    MainWindow *p=(MainWindow *)parent;
    p->statusBar()->addPermanentWidget(mousePosLabel);

    setMinimumSize(500400);
    setMouseTracking(true);
}
void CenterWidget::paintEvent(QPaintEvent *){
    QPainter p(this);
    /*for(auto const& line:lines)
        p.drawLine(line);
    for(auto const& ellipse:ellipses)
        p.drawEllipse(ellipse);
    for(auto const& rect:rects)
       p.drawRect(rect);
    if(beginDraw==true){
        switch(drawType){
        case 0: p.drawLine(p1p2); break;
        case 1: p.drawEllipse(QRect(p1p2)); break;
        case 2: p.drawRect(QRect(p1p2)); break;
        }
    }*/
    QColor c;
    for(auto shape:shapes){
        switch(colorType){
        case 0:shape->setColor(Qt::black);c=Qt::black;break;
        case 1:shape->setColor(Qt::green);c=Qt::green;break;
        case 2:shape->setColor(Qt::red);c=Qt::red;break;
        }
        shape->draw(&p);                //在此处内部写入,修改颜色
    }

    Shape *temp=nullptr;
    switch(drawType){
    case 0: temp=new Line(p1p2c); break;
    case 1: temp=new Ellipse(p1p2c); break;
    case 2: temp=new Rectangle(p1p2c); break;
    }
    temp->draw(&p);
    delete temp;
}
void CenterWidget::setDrawType(int type){
    drawType=type;
}
void CenterWidget::setcolorType(int color){
    colorType=color;
}
void CenterWidget::mousePressEvent(QMouseEvent *e){
    p1=e->pos();                //鼠标按下得到第一个点
    p2=p1;
    beginDraw=true;
}
void CenterWidget::mouseReleaseEvent(QMouseEvent *e){
    p2=e->pos();                  //鼠标松开得到第二个点
    beginDraw=false;
    if(p1==p2)
        return;
    //switch (drawType) {
    //case 0:lines.append(QLine(p1p2));break;
    //case 1:ellipses.append(QRect(p1p2));break;
    //case 2:rects.append(QRect(p1p2));break;}
    Shape *shape=nullptr;
    switch(drawType){
    case 0: shape=new Line(p1p2); break;
    case 1: shape=new Ellipse(p1p2); break;
    case 2: shape=new Rectangle(p1p2); break;
    }
    shapes.append(shape);
    isModified=true;
    update();
}
void CenterWidget::mouseMoveEvent(QMouseEvent *e){
    mousePosLabel->setText(“X:“+QString::number(e->x())+“Y:“ +QString::number(e->y()));
    if(beginDraw==false)
        return;
    p2=e->pos();
    update();
}
bool CenterWidget::getModifiedFlag(){
    return isModified;
}
void CenterWidget::newDrawing(){                //新建绘图
   // lines.clear();
    //ellipses.clear();
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6444  2017-12-27 19:48  Draw6\centerwidget.cpp

     文件       1535  2017-12-27 11:49  Draw6\centerwidget.h

     文件        551  2017-12-28 01:26  Draw6\Draw6.pro

     文件      17979  2017-12-28 08:43  Draw6\Draw6.pro.user

     文件        655  2017-12-27 10:47  Draw6\ellipse.cpp

     文件        409  2017-12-27 10:47  Draw6\ellipse.h

     文件        591  2017-12-27 10:47  Draw6\line.cpp

     文件        396  2017-12-27 10:19  Draw6\line.h

     文件        238  2017-12-27 09:05  Draw6\main.cpp

     文件       6397  2017-12-27 20:05  Draw6\mainwindow.cpp

     文件        983  2017-12-27 11:32  Draw6\mainwindow.h

     文件      15318  2017-12-28 00:55  Draw6\Q7XRX7XOK)BVG%6J)HV7EGE.png

     文件        670  2017-12-27 10:47  Draw6\rectangle.cpp

     文件        419  2017-12-27 10:47  Draw6\rectangle.h

     文件        165  2017-12-27 10:19  Draw6\shape.cpp

     文件        336  2017-12-27 10:19  Draw6\shape.h

     目录          0  2017-12-28 08:43  Draw6

----------- ---------  ---------- -----  ----

                53086                    17


评论

共有 条评论