资源简介
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 注册机
相关资源
- QT调用有道翻译API_在线英汉词典
- MainWindowAndQml.rar
- qtcharts实现在UI界面绘制图形
- Qt+Opencv实现四步相移
- 使用Qt实现TCP中客户端和服务器的交互
- Qt纯代码记事本.zip
- QT实战,利用定时器QTimer实现图片的移
- draw_qwidget.zip
- QT实现多人屏幕共享系统.rar
- DrawBorad.tar.xz
- 笔趣阁小说器
- QT串口通信实例62216
- qt_opengl_obj.zip
- 基于Qt实现的多人聊天
- 基于QT的三连棋井字棋游戏
- QT自定义风格qss得日历
- Qt动态进度条
- 用QT5写简单的串口调试工具
- QT实现摄像头采集图像并截图
- qt下人脸识别
- Qt自定义皮肤
- QT(5.6) 实现IP地址输入控件
- QT实现图片的二值化与灰度化
-
QT4 xm
l与QTableWidget的结合,QTableWid - QWidget加载QML界面,并通过信号槽交互
- S5PV210 友善之臂开发板 步进电机程序
- 基于QT开发的读取微软xbox手柄读写信
- 移远EC20 MQTT协议文档 英文
- 运用设计模式编写画图软件
- 网上爬的某学院PyQt教学视频
评论
共有 条评论