1 Star 0 Fork 0

Yuki/MYSVG-Editor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cancvns.h 4.17 KB
一键复制 编辑 原始数据 按行查看 历史
Yuki 提交于 30天前 . icon update
#ifndef CANCVNS_H
#define CANCVNS_H
#include <QWidget>
//#include <gtest/gtest_prod.h>
#include "myshape.h"
#include <QStack>
class MyShape;
class MyFreeLine;
class MyLine;
class MyRect;
class MyCircle;
class MyPentagon;
class MyTriangle;
class MyText;
class QMouseEvent;
class QPaintEvent;
class QWheelEvent;
class QSvgRenderer;
class QPixmap;
class QColor;
class QLineEdit;
class QPoint;
class QMenu;
class QAction;
class QKeyEvent;
namespace Ui {
class CanCvns;
}
class CanCvns : public QWidget
{
Q_OBJECT
// 最大撤销步数
static const int MAX_UNDO_STEPS = 20;
signals:
//传给myStatusbar的信号量
void tobarSizeInfo(int width, int height);
public:
explicit CanCvns(QWidget *parent = nullptr);
~CanCvns();
void change(const MyShapeType &tmp);
void loadSvgFile(const QString &filename);
void saveSvgFile(const QString &filename);
//画笔颜色
void setPencolor();
//画布颜色
void setBackcolor();
//填充颜色
void setFillcolor();
//响应拖拽对象
void setDragable();
//响应鼠标的滚轮事件,使SVG图片能够通过鼠标滚轮的滚动进行缩放
void wheelEvent(QWheelEvent *event) override;
//新建画布
void newCvns();
//清除画布
void clearCvns();
// 添加全选方法
void selectAll();
public slots:
//设置画布尺寸
void resetSize(const int &width, const int &height);
//复制对象事件
void onCopyshapeTriggered();
//粘贴对象事件
void onPasteshapeTriggered();
//删除对象事件
void onDeleteshapeTriggered();
//画笔尺寸
void resetpenSize(const int &pensize);
//画笔样式
void resetpenStyle(const int &StyleIndex);
//二次编辑
void onSecondeditTriggered();
// 撤销操作
void undo();
protected:
void paintEvent(QPaintEvent *) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void onLeftClickOut();
private:
Ui::CanCvns *ui;
MyShapeType currShape;
//画布 尺寸
int mWidth;
int mHeight;
//画笔尺寸
int penSize;
//画笔样式
int styleIndex;
//记录坐标
QPoint prePoint,copyPoint,pastePoint,areaSart,areaEnd;
//生成对象、标记选中对象、要复制的对象
MyShape *shape,*seclectedShape,*copyedShape;
//标记可移动
bool dragFlag;
//标记鼠标释放
bool releaseFlag;
//标记是否为保存文件
bool saveFlag;
//标记打开文件是否为通用文件、是否打开
bool fileType;
bool fileOpen;
//标记置于顶层、底层
bool upORdown;
bool copyFlag;
bool editFlag;
bool secondeditFlag;
//存储图形对象
QList<MyShape*> shapeList,copyShapeList,seclectedShapeList;
QSvgRenderer *m_render;
QPixmap pixMap;
//画布全局颜色
QColor brushColor;
QColor penColor;
//对象填充颜色
QColor fillColor;
QLineEdit *mEdit;
//PenStyle
QList<Qt::PenStyle> penStyleList;
//标记自定义文件dec属性
QString fileFlag;
//右击删除 置于顶层、底层、二次编辑
QMenu *rightClick;
QAction *copyShape;
QAction *pasteShape;
QAction *deleteShape;
QAction *toUp;
QAction *toDown;
QAction *secondEdit;
// 撤销相关,使用QStack替代QList提高效率
QStack<QList<MyShape*>> undoStack; // 撤销栈
void saveToUndoStack(); // 保存当前状态到撤销栈
void setMouseMenu();
void resetMouseMenu();
void paintPixmap(QPainter &painter);
void zoomChange(const qreal &factor);
void setInit();
bool KosoSvgHander(const QString &filename);
QColor transQColor(const QString &ColorStr);
void swapShape();
int penstyleGetter(const QString &Dasharray);
void pasteCopedShape(MyShape *copedShape);
void drawSelectArea(QPainter &painter);
void breakEdit();
// 清理内存的辅助方法
void clearShapeList(QList<MyShape*> &list);
// FRIEND_TEST(cancvnsTestCase, cancvnsTest);
};
#endif // CANCVNS_H
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/ccnuzcl/mysvg-editor.git
git@gitee.com:ccnuzcl/mysvg-editor.git
ccnuzcl
mysvg-editor
MYSVG-Editor
master

搜索帮助