资源简介
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
- 上一篇:windows资源管理系统 自启工具
- 下一篇:WinEdt 6.0 注册机
相关资源
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- 画图程序MFC/VC/VC CRectTracker 串行化
- QT,JPEG解码源代码(已完成)
- 用MFC实现简单的画图功能
- VC 6.0 MFC做画图软件
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- Scrach 画图.sb
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- raphael画各种简单的图形都可以拖动
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- delphi 画图撤销控件
- fastlib——十分好用的画图工具
- MQTT_3.1protocol_Specific中文版
评论
共有 条评论