由于个人也喜欢war3游戏开发,在很多时候需要“借用”别人的美术图标,而下载来的整合图标需要网格式裁切出来,于是上网查询有没有这种自定义网格裁切图片的软件,但很遗憾网上的软件要么功能不明所以要么不满足理想的使用方式,就在那一刻,“整一个”的种子在内心发芽。从软件的UI布局设计到功能制作,虽然功能单一,但是最终它~《切图怪兽》诞生了!!!当然图标也是“借用”的,一款可以对图片进行自定义网格式裁切的软件,小巧但是功能强大!以下是软件下载和源码分享
链接:切图怪兽下载
提取码:lz88
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QVector>
#include <QPixmap>
#include <QLineEdit>
#include <QScrollBar>
#include <QWheelEvent>
#include <QFileDialog>
#include <QPushButton>
#include <QIntValidator>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QGraphicsEffect>
class GraphicsView : public QGraphicsView{
public:
GraphicsView(QGraphicsView* parent = nullptr);
GraphicsView(QGraphicsScene* scene, QWidget* parent = nullptr);
~GraphicsView();
void wheelEvent(QWheelEvent* event);//视窗的缩放功能需要重写视窗的虚函数
};
class Widget : public QWidget{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
//所有的按钮
QPushButton* btnOpenImage;
QPushButton* btnCropInitX;
QPushButton* btnCropInitY;
QPushButton* btnCropRow;
QPushButton* btnCropCol;
QPushButton* btnCropWidth;
QPushButton* btnCropHeight;
QPushButton* btnCropSpaceX;
QPushButton* btnCropSpaceY;
QPushButton* btnResetValue;
QPushButton* btnCrop;
//所有的输入框
QLineEdit* eitCropInitX;
QLineEdit* eitCropInitY;
QLineEdit* eitCropRow;
QLineEdit* eitCropCol;
QLineEdit* eitCropWidth;
QLineEdit* eitCropHeight;
QLineEdit* eitCropSpaceX;
QLineEdit* eitCropSpaceY;
//保存所有裁切框的指针
QVector<QGraphicsRectItem*> vecCropRect;
QPixmap* mapImage;
QGraphicsScene* scene;//场景
GraphicsView* view;//视窗
QGraphicsPixmapItem* pixmap;//元素
QGraphicsDropShadowEffect* efeButtonShadow[11];//所有按钮的阴影
void resizeEvent(QResizeEvent* event);//重写widget尺寸缩放的虚函数
void CreateCropRect();//首次创建裁切框
void UpdateCropRect();//更新裁切框
void SetButtonAttribute(QPushButton& btn, QString name, QFont& font, const int& fontSize, const int& x, const int& y, const int& width, const int& height,
QString& styleSheet, QGraphicsDropShadowEffect* efeShadow);//设置按钮属性
void SetEditAttribute(QLineEdit& edit, QString name, QFont& font, const int& fontSize, const int& x, const int& y, const int& width, const int& height,
QIntValidator& validator, QFlags<Qt::AlignmentFlag> flag, QString& styleSheet);//设置输入框属性
private slots:
void ActionButtonClick(bool);//按钮触发事件
void ActionEditChanged(const QString&);//输入框触发事件
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
GraphicsView::GraphicsView(QGraphicsView* parent)
: QGraphicsView(parent){
}
GraphicsView::GraphicsView(QGraphicsScene* scene, QWidget* parent)
: QGraphicsView(scene, parent){
}
GraphicsView::~GraphicsView(){
}
Widget::Widget(QWidget *parent)
: QWidget(parent){
resize(800, 600);//设置软件初始大小
setMinimumSize(800, 600);//设置软件最新尺寸
setWindowTitle("切图怪兽");//设置名字
setWindowIcon(QIcon("://icon.ico"));//设置图标
QFont font("微软雅黑");
font.setBold(true);
for(int i = 0; i < 11; i++){
efeButtonShadow[i] = new QGraphicsDropShadowEffect(this);
efeButtonShadow[i]->setOffset(0, 0);
efeButtonShadow[i]->setBlurRadius(8);
efeButtonShadow[i]->setColor(QColor(44, 44, 44, 210));
}//给阴影设置属性
QIntValidator validator(0, 999, this);//设置输入框内数字范围
QString strButtonStyleSheet = "QPushButton{"
" background-color:rgb(54,98,236);"
" color:rgb(255,255,255);"
" border-radius:10px;"
" border:none;"
" text-align: center;"
" padding: 0px;"