From 3e2b364cc8ee0f04fcb63aa8e877e368ff63ffb0 Mon Sep 17 00:00:00 2001 From: muyi <2382928870@qq.com> Date: Wed, 18 Dec 2024 17:22:22 +0800 Subject: [PATCH] 11 --- supermarket/quiwidget.h | 505 ++++++-------------------------------- supermarket/supermarket.h | 107 ++++++-- 2 files changed, 165 insertions(+), 447 deletions(-) diff --git a/supermarket/quiwidget.h b/supermarket/quiwidget.h index f122070..8a1e200 100644 --- a/supermarket/quiwidget.h +++ b/supermarket/quiwidget.h @@ -1,6 +1,7 @@ #ifndef QUIWIDGET_H #define QUIWIDGET_H +// 定义一些常用的时间格式相关的宏,方便获取不同格式的时间字符串表示,用于后续在代码中输出时间信息等操作 #define TIMEMS qPrintable (QTime::currentTime().toString("HH:mm:ss zzz")) #define TIME qPrintable (QTime::currentTime().toString("HH:mm:ss")) #define QDATE qPrintable (QDate::currentDate().toString("yyyy-MM-dd")) @@ -9,6 +10,7 @@ #define STRDATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss")) #define STRDATETIMEMS qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss-zzz")) +// 根据操作系统类型定义换行符,在Windows系统下为 "\r\n",其他系统下为 "\n",方便后续文本处理时统一使用 #ifdef Q_OS_WIN #define NEWLINE "\r\n" #else @@ -31,8 +33,10 @@ * 12:集成获取应用程序文件名/ 等方法 **/ +// 包含头文件,可能包含了一些基础的类型定义、函数声明等,是当前类实现所依赖的其他定义 #include "head.h" +// 根据是否定义了quc宏来决定使用不同的导出宏定义,用于在作为插件等情况下正确导出类,使其能被外部使用 #ifdef quc #if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) #include @@ -40,19 +44,23 @@ #include #endif +// 定义QUIWidget类,继承自QDialog,在定义quc宏的情况下使用QDESIGNER_WIDGET_EXPORT导出该类,使其可在Qt设计师等环境中使用 class QDESIGNER_WIDGET_EXPORT QUIWidget : public QDialog - #else +#else +// 定义QUIWidget类,继承自QDialog,在未定义quc宏的情况下普通定义该类 class QUIWidget : public QDialog - #endif - +#endif { Q_OBJECT + // 将Style枚举类型暴露给Qt的元对象系统,以便能在信号槽机制等场景中使用 Q_ENUMS(Style) + // 定义属性title,可读可写,用于获取和设置窗口标题相关操作 Q_PROPERTY(QString title READ getTitle WRITE setTitle) + // 定义属性alignment,可读可写,用于获取和设置标题文本的对齐方式相关操作 Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment) public: - //将部分对象作为枚举值暴露给外部 + // 将部分对象作为枚举值暴露给外部,方便代码中通过这些枚举值来指代对应的部件,增强代码可读性 enum Widget { Lab_Ico = 0, //左上角图标 BtnMenu = 1, //下拉菜单按钮 @@ -62,7 +70,7 @@ public: BtnMenu_Close = 5 //关闭按钮 }; - //样式枚举 + // 样式枚举,定义了一系列可供选择的窗口样式类型,方便后续切换和设置窗口的外观风格 enum Style { Style_Silvery = 0, //银色样式 Style_Blue = 1, //蓝色样式 @@ -79,515 +87,152 @@ public: Style_FlatWhite = 12 //白色扁平样式 }; - //全局静态方法集合开始-------------------------------- + // 全局静态方法集合开始-------------------------------- public: - //桌面宽度高度 + // 获取桌面的宽度,以像素为单位,用于在需要根据桌面尺寸进行布局等操作时获取相关信息 static int deskWidth(); + // 获取桌面的高度,以像素为单位,同理用于基于桌面尺寸的相关操作 static int deskHeight(); - //程序本身文件名称 + // 获取程序本身的文件名称(不包含路径),方便在需要显示程序名等场景使用 static QString appName(); - //程序当前所在路径 + // 获取程序当前所在的路径,对于文件操作、资源加载等操作可以基于此路径来进行 static QString appPath(); - //新建目录 + // 创建一个新的目录,参数为要创建的目录名称,用于在程序运行时动态创建文件夹来存储数据等 static void newDir(const QString &dirName); - //写入消息到额外的的消息日志文件 + // 将指定的信息写入额外的消息日志文件中,可指定文件路径(默认路径为"log"),方便记录程序运行中的一些关键信息用于调试或记录操作历史 static void writeInfo(const QString &info, const QString &filePath = "log"); - //设置全局样式 + // 设置全局的样式,通过传入Style枚举类型的值来选择内置的样式,用于统一改变程序界面的整体风格 static void setStyle(QUIWidget::Style style); + // 设置全局样式,通过传入QSS样式文件路径以及相关颜色参数来定制样式,实现更灵活的界面外观设置 static void setStyle(const QString &qssFile, QString &paletteColor, QString &textColor); + // 设置全局样式,传入详细的QSS样式文件路径以及多个颜色相关参数,用于更精细地控制界面各部分的颜色表现 static void setStyle(const QString &qssFile, QString &textColor, QString &panelColor, QString &borderColor, QString &normalColorStart, QString &normalColorEnd, QString &darkColorStart, QString &darkColorEnd, QString &highColor); - //根据QSS样式获取对应颜色值 + // 根据给定的QSS样式字符串,提取出其中对应的各种颜色值,存储到相应的输出参数中,用于分析和获取已有样式中的颜色设置情况 static void getQssColor(const QString &qss, QString &textColor, QString &panelColor, QString &borderColor, QString &normalColorStart, QString &normalColorEnd, QString &darkColorStart, QString &darkColorEnd, QString &highColor); - //设置窗体居中显示 + // 将指定的窗口(QWidget类型的对象)设置为在屏幕居中显示,使界面布局更加美观、合理 static void setFormInCenter(QWidget *frm); - //设置翻译文件 + // 设置翻译文件,用于实现程序的多语言支持,默认使用指定的翻译文件路径(":/image/qt_zh_CN.qm") static void setTranslator(const QString &qmFile = ":/image/qt_zh_CN.qm"); - //设置编码 + // 设置编码相关内容,可能用于处理文本编码转换等情况,确保程序在不同编码环境下正确处理文本数据 static void setCode(); - //设置延时 + // 设置延时,让程序暂停执行指定的秒数,常用于需要等待一段时间再进行后续操作的场景,比如等待某个操作完成后再继续下一步 static void sleep(int sec); - //设置系统时间 + // 设置系统时间,传入年、月、日、时、分、秒等参数来更改系统的当前时间,可能用于特定的时间同步或测试需求 static void setSystemDateTime(const QString &year, const QString &month, const QString &day, const QString &hour, const QString &min, const QString &sec); - //设置开机自启动 + // 设置程序开机自启动,传入启动项名称和程序路径以及是否自动启动的布尔值(默认自动启动),方便用户让程序在开机时自动运行 static void runWithSystem(const QString &strName, const QString &strPath, bool autoRun = true); - //判断是否是IP地址 + // 判断给定的字符串是否是合法的IP地址格式,用于网络相关操作前对输入的IP地址进行合法性校验 static bool isIP(const QString &ip); - - //判断是否是MAC地址 + // 判断给定的字符串是否是合法的MAC地址格式,同样用于网络相关配置等场景下对MAC地址的合法性检查 static bool isMac(const QString &mac); - - //判断是否是合法的电话号码 + // 判断给定的字符串是否是合法的电话号码格式,用于涉及电话号码输入和验证的业务逻辑中 static bool isTel(const QString &tel); - - //判断是否是合法的邮箱地址 + // 判断给定的字符串是否是合法的邮箱地址格式,常用于用户注册、信息填写等场景下对邮箱输入的有效性验证 static bool isEmail(const QString &email); - - //16进制字符串转10进制 + // 将十六进制表示的字符串转换为十进制整数,用于不同进制数据转换的需求,比如处理一些十六进制编码的数据 static int strHexToDecimal(const QString &strHex); - - //10进制字符串转10进制 + // 将十进制表示的字符串转换为十进制整数,可能用于对用户输入的十进制数字字符串进行处理 static int strDecimalToDecimal(const QString &strDecimal); - - //2进制字符串转10进制 + // 将二进制表示的字符串转换为十进制整数,用于二进制数据与十进制数据之间的转换场景 static int strBinToDecimal(const QString &strBin); - - //16进制字符串转2进制字符串 + // 将十六进制表示的字符串转换为二进制表示的字符串,便于在不同进制数据间进行转换和处理,比如加密解密等操作中涉及的数据转换 static QString strHexToStrBin(const QString &strHex); - - //10进制转2进制字符串一个字节 + // 将十进制整数转换为二进制表示的字符串,且长度为一个字节(8位),常用于字节级别的数据处理和转换 static QString decimalToStrBin1(int decimal); - - //10进制转2进制字符串两个字节 + // 将十进制整数转换为二进制表示的字符串,且长度为两个字节(16位),同样用于特定字节长度要求的数据转换场景 static QString decimalToStrBin2(int decimal); - - //10进制转16进制字符串,补零. + // 将十进制整数转换为十六进制表示的字符串,并在必要时补零,保证十六进制表示的格式规范,常用于数据显示、存储等场景下的十六进制转换 static QString decimalToStrHex(int decimal); - - //int转字节数组 + // 将整数转换为字节数组,用于将数值类型的数据按照字节形式进行处理,比如网络传输、文件存储等需要按字节操作的情况 static QByteArray intToByte(int i); - - //字节数组转int + // 将字节数组转换为整数,与intToByte相对应,用于从字节数据中还原出整数值,常用于接收网络数据或读取文件中存储的数值信息等情况 static int byteToInt(const QByteArray &data); - - //ushort转字节数组 + // 将无符号短整数(ushort)转换为字节数组,同样是为了便于在字节层面操作数据,适用于特定的数据格式要求场景 static QByteArray ushortToByte(ushort i); - - //字节数组转ushort + // 将字节数组转换为无符号短整数,与ushortToByte相对应,用于从字节数据中获取无符号短整数值 static int byteToUShort(const QByteArray &data); - //异或加密算法 + // 使用异或加密/解密算法对给定的字符串进行处理,传入字符串和密钥字符,可用于简单的数据加密和解密需求,保障数据的一定安全性 static QString getXorEncryptDecrypt(const QString &str, char key); - - //异或校验 + // 对给定的字节数组数据进行异或校验操作,返回校验结果(uchar类型),常用于数据完整性校验等场景 static uchar getOrCode(const QByteArray &data); - - //计算校验码 + // 计算给定字节数组数据的校验码(uchar类型),用于验证数据在传输或存储过程中是否发生错误等情况 static uchar getCheckCode(const QByteArray &data); - - //字节数组转Ascii字符串 + // 将字节数组转换为ASCII字符串表示,方便在需要以文本形式展示字节数据内容或者进行文本处理时使用 static QString byteArrayToAsciiStr(const QByteArray &data); - - //16进制字符串转字节数组 + // 将十六进制表示的字符串转换为字节数组,用于将十六进制格式的数据转换为字节形式进行后续处理,比如解析十六进制编码的文件内容等 static QByteArray hexStrToByteArray(const QString &str); + // 辅助函数,用于将十六进制字符(单个字符)转换为对应的字节值,供hexStrToByteArray等函数内部使用 static char convertHexChar(char ch); - - //Ascii字符串转字节数组 + // 将ASCII字符串转换为字节数组,与byteArrayToAsciiStr相对应,用于将文本形式的ASCII数据转换为字节形式进行处理 static QByteArray asciiStrToByteArray(const QString &str); - - //字节数组转16进制字符串 + // 将字节数组转换为十六进制表示的字符串,用于将字节数据以十六进制格式展示出来,比如在调试、数据查看等场景下方便查看字节数据内容 static QString byteArrayToHexStr(const QByteArray &data); - //获取选择的文件 + // 弹出文件选择对话框,根据给定的文件过滤器(指定文件类型等筛选条件)来获取用户选择的单个文件路径,默认从应用程序所在目录开始选择 static QString getFileName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); - - //获取选择的文件集合 + // 弹出文件选择对话框,根据给定的文件过滤器获取用户选择的多个文件路径,默认从应用程序所在目录开始选择,返回文件路径列表 static QStringList getFileNames(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); - - //获取选择的目录 + // 弹出文件夹选择对话框,获取用户选择的文件夹路径,用于选择存储目录、加载文件夹内资源等场景 static QString getFolderName(); - - //获取文件名,含拓展名 + // 从给定的文件路径字符串中获取文件名(包含扩展名),方便在文件操作中获取文件名部分进行展示、处理等操作 static QString getFileNameWithExtension(const QString &strFilePath); - - //获取选择文件夹中的文件 + // 获取指定文件夹下符合给定文件过滤器列表的所有文件的文件名列表,用于批量处理文件夹内特定类型文件的情况 static QStringList getFolderFileNames(const QStringList &filter); - - //文件夹是否存在 + // 判断指定的文件夹是否存在,返回布尔值,用于在进行文件夹相关操作前先确认文件夹是否已存在,避免操作失败 static bool folderIsExist(const QString &strFolder); - - //文件是否存在 + // 判断指定的文件是否存在,返回布尔值,常用于文件读取、写入等操作前确认文件是否存在 static bool fileIsExist(const QString &strFile); - - //复制文件 + // 复制文件,将源文件复制到目标文件位置,用于文件备份、迁移等操作,返回是否复制成功的布尔值 static bool copyFile(const QString &sourceFile, const QString &targetFile); - - //删除文件夹下所有文件 + // 删除指定文件夹下的所有文件,用于清理文件夹内容、重置数据等场景,注意不会删除文件夹本身 static void deleteDirectory(const QString &path); - - //判断IP地址及端口是否在线 + // 判断指定的IP地址及端口是否在线(是否可连接),传入IP地址、端口号以及超时时间(默认1000毫秒),常用于网络检测相关功能 static bool ipLive(const QString &ip, int port, int timeout = 1000); - - //获取网页所有源代码 + // 获取指定网页的所有源代码内容,传入网页的URL地址,可用于网页数据抓取、分析等需求 static QString getHtml(const QString &url); - - //获取本机公网IP地址 + // 从给定的网页源代码(字符串形式)中获取本机的公网IP地址,用于获取网络相关信息,比如显示本机在网络中的公网IP情况 static QString getNetIP(const QString &webCode); - - //获取本机IP + // 获取本机的IP地址(本地局域网IP等情况),用于在本地网络环境中确定本机的网络标识 static QString getLocalIP(); - - //Url地址转为IP地址 + // 将给定的URL地址转换为对应的IP地址,用于网络地址转换相关的操作,比如某些网络配置、解析场景 static QString urlToIP(const QString &url); - - //判断是否通外网 + // 判断本机是否能连通外网,返回布尔值,常用于网络连接状态检测等功能,比如判断程序是否能正常访问互联网资源 static bool isWebOk(); - - //弹出消息框 + // 弹出一个消息提示框,显示给定的信息内容,可指定自动关闭的时间(默认不自动关闭),用于向用户展示一些提示性信息 static void showMessageBoxInfo(const QString &info, int closeSec = 0); - //弹出错误框 + // 弹出一个错误提示框,显示给定的错误信息内容,可指定自动关闭的时间(默认不自动关闭),用于在出现错误情况时告知用户 static void showMessageBoxError(const QString &info, int closeSec = 0); - //弹出询问框 + // 弹出一个询问框,显示给定的询问信息内容,返回用户的选择结果(比如确定、取消等对应的整数值),用于获取用户在某些操作上的确认情况 static int showMessageBoxQuestion(const QString &info); - //弹出输入框 + // 弹出一个输入框,让用户输入内容,返回用户输入的字符串,同时通过引用参数返回输入是否成功的布尔值,可设置标题、输入框类型、自动关闭时间、默认值以及是否为密码框等属性 static QString showInputBox(bool &ok, const QString &title, int type = 0, int closeSec = 0, QString defaultValue = QString(), bool pwd = false); - //全局静态方法集合结束-------------------------------- + // 全局静态方法集合结束-------------------------------- public: + // 显式构造函数,传入父窗口指针(默认值为0,即无父窗口),用于创建QUIWidget类的实例对象 explicit QUIWidget(QWidget *parent = 0); - ~QUIWidget(); - -protected: - bool eventFilter(QObject *obj, QEvent *evt); - -private: - QVBoxLayout *verticalLayout1; - QWidget *widgetMain; - QVBoxLayout *verticalLayout2; - QWidget *widgetTitle; - QHBoxLayout *horizontalLayout4; - QLabel *labIco; - QLabel *labTitle; - QWidget *widgetMenu; - QHBoxLayout *horizontalLayout; - QToolButton *btnMenu; - QPushButton *btnMenu_Min; - QPushButton *btnMenu_Max; - QPushButton *btnMenu_Close; - QWidget *widget; - QVBoxLayout *verticalLayout3; - -private: - bool max; //是否处于最大化状态 - QRect location; //鼠标移动窗体后的坐标位置 - - QString title; //标题 - Qt::Alignment alignment; //标题文本对齐 - bool minHide; //最小化隐藏 - QWidget *mainWidget; //主窗体对象 - -public: - QLabel *getLabIco() const; - QLabel *getLabTitle() const; - QToolButton *getBtnMenu() const; - QPushButton *getBtnMenuMin() const; - QPushButton *getBtnMenuMax() const; - QPushButton *getBtnMenuMClose() const; - - Style getStyle() const; - QString getTitle() const; - Qt::Alignment getAlignment() const; - - QSize sizeHint() const; - QSize minimumSizeHint() const; - -private slots: - void initControl(); //初始化控件 - void initForm(); //初始化窗体 - void changeStyle(); //更换样式 - -private slots: - void on_btnMenu_Min_clicked(); - void on_btnMenu_Max_clicked(); - void on_btnMenu_Close_clicked(); - -public Q_SLOTS: - //设置部件图标 - void setIcon(QUIWidget::Widget widget, QChar str, quint32 size = 9); - void setIconMain(QChar str, quint32 size = 9); - //设置部件图片 - void setPixmap(QUIWidget::Widget widget, const QString &file, const QSize &size = QSize(16, 16)); - //设置部件是否可见 - void setVisible(QUIWidget::Widget widget, bool visible = true); - //设置只有关闭按钮 - void setOnlyCloseBtn(); - - //设置标题栏高度 - void setTitleHeight(int height); - //设置按钮统一宽度 - void setBtnWidth(int width); - - //设置标题及文本样式 - void setTitle(const QString &title); - void setAlignment(Qt::Alignment alignment); - - //设置最小化隐藏 - void setMinHide(bool minHide); - - //设置主窗体 - void setMainWidget(QWidget *mainWidget); - -Q_SIGNALS: - void changeStyle(const QString &qssFile); - void closing(); -}; - -//弹出信息框类 -class QUIMessageBox : public QDialog -{ - Q_OBJECT - -public: - explicit QUIMessageBox(QWidget *parent = 0); - ~QUIMessageBox(); - - static QUIMessageBox *Instance() - { - static QMutex mutex; - - if (!self) { - QMutexLocker locker(&mutex); - - if (!self) { - self = new QUIMessageBox; - } - } - - return self; - } - -protected: - void closeEvent(QCloseEvent *); - bool eventFilter(QObject *obj, QEvent *evt); - -private: - static QUIMessageBox *self; - - QVBoxLayout *verticalLayout1; - QWidget *widgetTitle; - QHBoxLayout *horizontalLayout3; - QLabel *labIco; - QLabel *labTitle; - QLabel *labTime; - QWidget *widgetMenu; - QHBoxLayout *horizontalLayout4; - QPushButton *btnMenu_Close; - QWidget *widgetMain; - QVBoxLayout *verticalLayout2; - QFrame *frame; - QVBoxLayout *verticalLayout4; - QHBoxLayout *horizontalLayout1; - QLabel *labIcoMain; - QSpacerItem *horizontalSpacer1; - QLabel *labInfo; - QHBoxLayout *horizontalLayout2; - QSpacerItem *horizontalSpacer2; - QPushButton *btnOk; - QPushButton *btnCancel; - -private: - int closeSec; //总显示时间 - int currentSec; //当前已显示时间 - -private slots: - void initControl(); //初始化控件 - void initForm(); //初始化窗体 - void checkSec(); //校验倒计时 - -private slots: - void on_btnOk_clicked(); - void on_btnMenu_Close_clicked(); - -public Q_SLOTS: - void setIconMain(QChar str, quint32 size = 9); - void setMessage(const QString &msg, int type, int closeSec = 0); -}; - -//弹出输入框类 -class QUIInputBox : public QDialog -{ - Q_OBJECT - -public: - explicit QUIInputBox(QWidget *parent = 0); - ~QUIInputBox(); - - static QUIInputBox *Instance() - { - static QMutex mutex; - - if (!self) { - QMutexLocker locker(&mutex); - - if (!self) { - self = new QUIInputBox; - } - } - - return self; - } - -protected: - void closeEvent(QCloseEvent *); - bool eventFilter(QObject *obj, QEvent *evt); - -private: - static QUIInputBox *self; - - QVBoxLayout *verticalLayout1; - QWidget *widgetTitle; - QHBoxLayout *horizontalLayout1; - QLabel *labIco; - QLabel *labTitle; - QLabel *labTime; - QWidget *widgetMenu; - QHBoxLayout *horizontalLayout2; - QPushButton *btnMenu_Close; - QWidget *widgetMain; - QVBoxLayout *verticalLayout2; - QFrame *frame; - QVBoxLayout *verticalLayout3; - QLabel *labInfo; - QLineEdit *txtValue; - QComboBox *cboxValue; - QHBoxLayout *lay; - QSpacerItem *horizontalSpacer; - QPushButton *btnOk; - QPushButton *btnCancel; - -private: - int closeSec; //总显示时间 - int currentSec; //当前已显示时间 - QString value; //当前值 - -private slots: - void initControl(); //初始化控件 - void initForm(); //初始化窗体 - void checkSec(); //校验倒计时 - -private slots: - void on_btnOk_clicked(); - void on_btnMenu_Close_clicked(); - -public: - QString getValue()const; - -public Q_SLOTS: - void setIconMain(QChar str, quint32 size = 9); - void setParameter(const QString &title, int type = 0, int closeSec = 0, - QString defaultValue = QString(), bool pwd = false); - -}; - -//图形字体处理类 -class IconHelper : public QObject -{ - Q_OBJECT - -public: - explicit IconHelper(QObject *parent = 0); - static IconHelper *Instance() - { - static QMutex mutex; - - if (!self) { - QMutexLocker locker(&mutex); - - if (!self) { - self = new IconHelper; - } - } - - return self; - } - - void setIcon(QLabel *lab, QChar c, quint32 size = 9); - void setIcon(QAbstractButton *btn, QChar c, quint32 size = 9); - QPixmap getPixmap(const QString &color, QChar c, quint32 size = 9, - quint32 pixWidth = 10, quint32 pixHeight = 10); - - //根据按钮获取该按钮对应的图标 - QPixmap getPixmap(QToolButton *btn, bool normal); - - //指定导航面板样式,不带图标 - static void setStyle(QWidget *widget, const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //指定导航面板样式,带图标和效果切换 - void setStyle(QWidget *widget, QList btns, QList pixChar, - quint32 iconSize = 9, quint32 iconWidth = 10, quint32 iconHeight = 10, - const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //指定导航按钮样式,带图标和效果切换 - void setStyle(QFrame *frame, QList btns, QList pixChar, - quint32 iconSize = 9, quint32 iconWidth = 10, quint32 iconHeight = 10, - const QString &normalBgColor = "#2FC5A2", - const QString &darkBgColor = "#3EA7E9", - const QString &normalTextColor = "#EEEEEE", - const QString &darkTextColor = "#FFFFFF"); - -protected: - bool eventFilter(QObject *watched, QEvent *event); - -private: - static IconHelper *self; //对象自身 - QFont iconFont; //图形字体 - QList btns; //按钮队列 - QList pixNormal; //正常图片队列 - QList pixDark; //加深图片队列 -}; - -//全局变量控制 -class QUIConfig -{ -public: - //全局图标 - static QChar IconMain; //标题栏左上角图标 - static QChar IconMenu; //下拉菜单图标 - static QChar IconMin; //最小化图标 - static QChar IconMax; //最大化图标 - static QChar IconNormal; //还原图标 - static QChar IconClose; //关闭图标 - - static QString FontName; //全局字体名称 - static int FontSize; //全局字体大小 - static QString ConfigFile; //配置文件文件路径及名称 - - //样式表颜色值 - static QString TextColor; //文字颜色 - static QString PanelColor; //面板颜色 - static QString BorderColor; //边框颜色 - static QString NormalColorStart;//正常状态开始颜色 - static QString NormalColorEnd; //正常状态结束颜色 - static QString DarkColorStart; //加深状态开始颜色 - static QString DarkColorEnd; //加深状态结束颜色 - static QString HighColor; //高亮颜色 - - static void ReadConfig(); //读取配置文件,在main函数最开始加载程序载入 - static void WriteConfig(); //写入配置文件,在更改配置文件程序关闭时调用 - static void NewConfig(); //以初始值新建配置文件 - static bool CheckConfig(); //校验配置文件 -}; - -#endif // QUIWIDGET_H + // 析构函数,用于释放 \ No newline at end of file diff --git a/supermarket/supermarket.h b/supermarket/supermarket.h index 81e6462..e8b4af0 100644 --- a/supermarket/supermarket.h +++ b/supermarket/supermarket.h @@ -1,93 +1,166 @@ #ifndef SUPERMARKET_H #define SUPERMARKET_H +// 包含Qt的主窗口头文件,用于创建基于Qt的图形用户界面应用程序的主窗口类 #include +// 包含C++标准输入输出流文件操作相关头文件,用于读写文件等操作 #include +// 包含字符串流头文件,方便对字符串进行分割、解析等操作,常用于处理按特定格式分隔的文本数据 #include +// 包含C++标准输入输出流头文件,用于基本的控制台输入输出操作(这里可能部分功能未用到,但习惯性包含) #include +// 包含Qt的字符串类头文件,用于处理文本字符串,在Qt框架中广泛使用 #include +// 包含C++标准字符串头文件,用于使用标准的字符串类型,便于与其他C++标准库函数配合使用 #include +// 包含Qt的定时器类头文件,用于实现定时触发某些操作的功能,比如定时更新界面显示、执行定时任务等 #include +// 包含Qt的文件操作类头文件,用于进行文件的读写、复制、删除等各种文件相关操作 #include +// 包含Qt的网络相关类头文件,虽然此处代码中未明确体现其具体使用,但可能后续会用于网络通信相关功能扩展 #include +// 包含Qt的调试输出头文件,方便在调试程序时输出相关信息,查看程序运行状态和变量值等 #include +// 包含Qt的日期时间类头文件,用于获取、处理日期时间相关信息,比如记录操作时间、显示时间等 #include +// 包含由UI设计工具生成的超市界面相关的头文件,里面包含了界面元素的定义和相关操作函数声明等 #include "ui_supermarket.h" +// 包含自定义的QUIWidget头文件,可能这个类提供了一些通用的窗口部件相关的功能、样式设置等,供本类使用 #include "quiwidget.h" +// 使用标准命名空间,避免在使用标准库中的类型、函数等时需要频繁添加std::前缀 using namespace std; +// 声明Ui命名空间下的Supermarket类,这是由UI设计工具生成的类,具体定义在对应的ui_supermarket.cpp文件中,此处提前声明方便后续使用 namespace Ui { class Supermarket; } +// 定义Good结构体,用于表示商品的相关信息,一个Good结构体对象代表一个商品的各项属性 struct Good { + // 商品名称,使用标准字符串类型存储 string name; + // 商品的唯一标识符(ID),用于区分不同商品 string id; - double cost, price; //分别是进价和售价 + // 商品的进价,即进货价格,使用双精度浮点数类型表示 + double cost, + // 商品的售价,即销售给顾客的价格,同样为双精度浮点数类型 + price; + // 商品的库存数量,以数字形式存储 double number; - string measure_unit, category; //计量单位和类别 - string purchase_time, sell_time; //入库、出库时间和保质期 + // 商品的计量单位,比如个、千克、升等,用字符串表示 + string measure_unit, + // 商品的分类信息,例如食品、日用品等,也是字符串类型 + category; + // 商品的入库时间,记录商品进入仓库的具体日期时间,格式为字符串 + string purchase_time, + // 商品的出库时间,记录商品从仓库发出(销售等情况)的日期时间,初始为暂无记录等表示,同样是字符串类型 + sell_time; + // 指向下一个商品节点的指针,用于构建链表结构来存储多个商品信息 Good* next; }; - +// 定义Supermarket类,继承自QMainWindow,代表超市管理系统的主窗口类,包含了各种与超市业务操作相关的功能和界面交互逻辑 class Supermarket : public QMainWindow { Q_OBJECT - public: + // 显式构造函数,用于创建Supermarket类的实例对象,传入父窗口指针(默认值为0,表示无父窗口) explicit Supermarket(QWidget *parent = 0); + // 析构函数,用于释放Supermarket类对象占用的资源,比如相关的内存空间等 ~Supermarket(); - bool ManInput(); //人工输入并创建、入库商品,成功返回1,否则0,下同 - bool BatchInput(); //批量导入 - bool BatchOutput(string dir); //导出数据 - bool OutStorage(); //出库操作 - bool SetDate(); //修改数据 - Good* SearchChild(string pid); //搜索查询部件 + // 人工输入商品信息并创建商品对象,将其入库到系统中,操作成功返回1,失败返回0,默认用于单个商品的手动录入操作 + bool ManInput(); + // 批量导入商品数据,从外部文件读取数据并解析后添加到系统中,成功返回1,失败返回0,用于一次性导入多个商品信息的场景 + bool BatchInput(); + // 将系统中的商品数据导出到指定目录下,以某种格式(可能是文件形式)保存,成功返回1,失败返回0,用于数据备份、共享等需求 + bool BatchOutput(string dir); + // 执行商品出库操作,减少库存数量等相关处理,成功返回1,失败返回0,对应商品销售等出库业务场景 + bool OutStorage(); + // 修改商品的相关数据,比如价格、数量等信息,成功返回1,失败返回0,用于对已存在商品信息的更新操作 + bool SetDate(); + // 根据商品ID在系统中搜索查询对应的商品信息,返回找到的商品指针(Good*类型),若未找到则返回NULL + Good* SearchChild(string pid); + // 执行商品信息的搜索操作,可能是根据多个条件在系统中查找符合要求的商品,并将结果展示在界面上(具体展示方式看函数实现) void Search(); - long GetNumber(); //个数 + // 获取系统中商品的总个数,返回长整型的数量值,用于统计库存商品总数等情况 + long GetNumber(); + // 获取商品链表中的最后一个商品节点的指针,用于在链表末尾添加新节点等操作场景 Good* GetLastPointer(); - bool CheckAccount(bool a = 1);//用户权限检查 + // 检查用户的权限,传入参数a(默认值为1,可根据不同情况传入不同值来区分不同权限检查需求),根据规则返回是否有权限的布尔值 + bool CheckAccount(bool a = 1); + // 检查给定的商品ID是否已经存在于系统中,返回布尔值,用于在添加新商品时避免ID重复等情况 bool CheckID(string pid); - void Statistics();//统计 - void Log(string operators, bool end_out,Good *p); //操作记录日志 + // 进行各种统计相关操作,比如统计商品总价值、总支出等信息,用于生成报表、展示统计数据等功能 + void Statistics(); + // 记录操作记录日志,传入操作名称、操作是否成功的布尔值以及操作对应的商品指针(可为NULL,具体看操作类型),用于记录系统中的关键操作历史 + void Log(string operators, bool end_out,Good *p); + // 以下函数被注释掉了,可能原本计划实现但暂未完成或者后续不再需要的功能,从函数名看可能是用于上传相关操作(比如上传数据到服务器等) //bool Upload(); - QTime t; + // 用于记录时间相关操作的时间对象,具体使用场景看对应函数实现(比如统计操作耗时等) + QTime t; private: + // 指向由UI设计工具生成的超市界面类的指针,通过这个指针可以访问和操作界面上的各种元素(如按钮、文本框等) Ui::Supermarket *ui; + // 指向商品链表头节点的指针,用于管理系统中的所有商品信息,通过链表结构存储多个商品 Good *head; + // 记录系统中商品的总数量,方便快速获取库存商品总数,避免每次都遍历链表统计 long number; + // 指向一个标准项模型对象,用于与界面上的表格视图等控件配合,展示和管理数据(如商品列表数据等) QStandardItemModel *pmodel; + // 记录当前登录的账户名称,用于权限判断、操作记录等与用户账户相关的功能逻辑 string loginin_account; private slots: + // 初始化表单相关设置,比如创建模型、设置界面显示等,返回初始化好的标准项模型指针,供后续操作使用 QStandardItemModel* initForm(); + // 进行登录账户后的相关初始化操作,比如显示登录后应显示的界面元素,隐藏未登录时的相关元素等 void initAccount(); + // 进行未登录账户时的界面初始化操作,隐藏登录后才显示的元素,显示未登录相关的界面元素,如登录框等 void initUnAccount(); + // 处理登录按钮点击事件的槽函数,用于验证用户输入的账号和密码,并进行登录相关的业务逻辑处理 void on_pushButton_clicked(); + // 处理某个按钮(可能是与人工输入商品相关的按钮)点击事件的槽函数,调用ManInput函数进行人工输入商品操作 void on_pushButton_3_clicked(); + // 处理某个按钮(可能是与商品出库相关的按钮)点击事件的槽函数,调用OutStorage函数执行商品出库操作 void on_pushButton_2_clicked(); + // 处理某个按钮(可能是与商品搜索相关的按钮)点击事件的槽函数,调用Search函数进行商品搜索操作 void on_pushButton_6_clicked(); + // 处理某个按钮(可能是与修改商品数据相关的按钮)点击事件的槽函数,调用SetDate函数执行修改商品数据操作 void on_pushButton_7_clicked(); + // 处理某个菜单动作(可能是批量输入相关菜单选项)触发事件的槽函数,调用BatchInput函数执行批量导入商品数据操作 void on_action_O_triggered(); + // 处理某个菜单动作(可能是导出CSV文件相关菜单选项)触发事件的槽函数,调用BatchOutput函数执行导出数据操作 void on_actionCSV_C_triggered(); + // 处理某个菜单动作(可能是查看帮助相关菜单选项)触发事件的槽函数,具体功能看实现(可能打开帮助文档等) void on_action_H_triggered(); + // 处理某个菜单动作(可能是打开某个网址相关菜单选项)触发事件的槽函数,具体功能看实现(可能打开指定网页用于展示信息等) void on_action_A_triggered(); + // 处理某个菜单动作(可能是打开另一个网址相关菜单选项)触发事件的槽函数,具体功能看实现(类似上面打开网址的功能,不同网址对应不同用途) void on_action_B_triggered(); + // 处理某个按钮(可能是用于清空某些输入框等操作的按钮)点击事件的槽函数,执行对应的清空操作,重置界面上相关输入控件的内容 void on_pushButton_8_clicked(); + // 处理另一个按钮(可能也是用于清空相关输入框等操作的按钮)点击事件的槽函数,执行对应的清空操作,类似上面的功能但针对不同的输入控件 void on_pushButton_9_clicked(); + // 处理又一个按钮(同样可能是清空输入框相关操作按钮)点击事件的槽函数,执行清空操作,针对另外一组输入控件进行重置 void on_pushButton_10_clicked(); + // 处理某个按钮(可能是退出登录或者重置登录状态相关按钮)点击事件的槽函数,执行相应的操作,比如清空登录账户信息,恢复未登录界面显示等 void on_pushButton_4_clicked(); + // 处理某个菜单动作(可能是清空数据库相关菜单选项)触发事件的槽函数,执行清空数据库的相关操作,比如删除所有商品记录等 void on_actiond_2_triggered(); + // 处理某个菜单动作(可能是导出操作记录相关菜单选项)触发事件的槽函数,执行导出操作记录相关的操作,比如将操作日志保存到文件等 void on_actiond_triggered(); + // 处理某个菜单动作(可能是特定的加密或数据处理相关菜单选项)触发事件的槽函数,执行对应的复杂操作(具体看函数实现内容) void on_actiondda_triggered(); public slots: + // 定时器触发的槽函数,用于更新界面上显示的当前时间信息,保持时间显示的实时性 void timerUpdate(void); + // 定时器触发的另一个槽函数,用于执行随着时间增加而需要进行的操作,比如统计数据更新等(具体看函数实现) void timerAdd(); }; +// 以下函数被注释掉了,可能原本计划实现但暂未完成或者后续不再需要的功能,从函数名看可能是用于上传相关操作的具体实现函数(比如设置上传参数、上传文件等) //void UpLoadForm(QString Path,QMap params,QString fileFormName,QFile *uploadFile,QString newFileName); -#endif // SUPERMARKET_H +#endif // SUPERMARKET_H \ No newline at end of file