C++【QT系列】手搓软件 -切图怪兽

由于个人也喜欢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;"
                                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值