Compare commits

...

10 Commits
h ... main

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/supermarket.iml" filepath="$PROJECT_DIR$/.idea/supermarket.iml" />
</modules>
</component>
</project>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -1,24 +1,34 @@
#include <QtCore>
// 包含QtCore模块提供了Qt的核心功能如对象树、事件处理、文件处理等。
#include <QtCore>
// 包含QtGui模块提供了图形用户界面的基本功能如窗口管理、图形视图框架、基本的图形绘制等。
#include <QtGui>
// 包含QtNetwork模块提供了网络通信的功能如TCP/IP、UDP等。
#include <QtNetwork>
// 检查Qt版本是否大于5.0.0如果是则包含QtWidgets模块提供了构建图形用户界面所需的窗口组件。
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#include <QtWidgets>
#endif
// 如果编译器是微软的Visual Studio 2010即_MSC_VER >= 1600则设置执行字符集为UTF-8。
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
#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"))
#define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss"))
#define DATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
#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"))
// 定义了一系列宏,用于快速获取当前时间、日期等格式化字符串。
#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")) // 获取当前日期
#define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss")) // 获取当前时间,分钟和秒为单个数字
#define DATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")) // 获取当前日期和时间
#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")) // 获取当前日期和时间,包括时区信息,短横线分隔
// 定义了应用程序的一些基本信息的宏。
#define AppName "QUI" // 定义应用程序名称为"QUI"
#define AppPath qApp->applicationDirPath() // 获取应用程序的安装路径
#define AppDeskWidth qApp->desktop()->availableGeometry().width() // 获取桌面的宽度
#define AppDeskHeight qApp->desktop()->availableGeometry().height() // 获取桌面的高度
#define AppName "QUI"
#define AppPath qApp->applicationDirPath()
#define AppDeskWidth qApp->desktop()->availableGeometry().width()
#define AppDeskHeight qApp->desktop()->availableGeometry().height()

File diff suppressed because it is too large Load Diff

@ -1,300 +1,139 @@
#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"))
#define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss"))
#define DATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
#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"))
// 包含QtCore模块提供了Qt的核心功能如对象树、事件处理、文件处理等。
#include <QtCore>
// 包含QtGui模块提供了图形用户界面的基本功能如窗口管理、图形视图框架、基本的图形绘制等。
#include <QtGui>
// 包含QtNetwork模块提供了网络通信的功能如TCP/IP、UDP等。
#include <QtNetwork>
// 根据不同Qt版本包含不同的模块
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
// 包含QtWidgets模块提供了构建图形用户界面所需的窗口组件。
#include <QtWidgets>
#endif
// 如果编译器是微软的Visual Studio 2010即_MSC_VER >= 1600则设置执行字符集为UTF-8。
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
// 定义了一系列宏,用于快速获取当前时间、日期等格式化字符串。
#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")) // 获取当前日期
#define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss")) // 获取当前时间,分钟和秒为单个数字
#define DATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")) // 获取当前日期和时间
#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")) // 获取当前日期和时间,包括时区信息,短横线分隔
// 根据不同操作系统定义换行符
#ifdef Q_OS_WIN
#define NEWLINE "\r\n"
#define NEWLINE "\r\n" // Windows系统使用回车和换行
#else
#define NEWLINE "\n"
#define NEWLINE "\n" // 其他系统使用换行
#endif
/**
* QUI
* 1: N >= 12 ,,
* 2:(///)
* 3:,使,
* 4:, setSizeGripEnabled(true);
* 5: setStyle
* 6: showMessageBoxInfo
* 7: showMessageBoxError
* 8: showMessageBoxError
* 9: showInputBox
* 10:
* 11:////
* 12:/
**/
* /
**/
// 包含自定义头文件
#include "head.h"
// 根据是否在Qt Designer中使用包含不同的头文件
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#include <QtDesigner/QDesignerExportWidget> // Qt 5.7 以下版本
#else
#include <QtUiPlugin/QDesignerExportWidget>
#include <QtUiPlugin/QDesignerExportWidget> // Qt 5.7 及以上版本
#endif
// 导出QUIWidget类使其在Qt Designer中可用
class QDESIGNER_WIDGET_EXPORT QUIWidget : public QDialog
#else
#else
class QUIWidget : public QDialog
#endif
#endif
{
Q_OBJECT
Q_ENUMS(Style)
Q_PROPERTY(QString title READ getTitle WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
Q_ENUMS(Style) // 枚举类型,定义样式
Q_PROPERTY(QString title READ getTitle WRITE setTitle) // 属性,标题
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment) // 属性,标题对齐
public:
//将部分对象作为枚举值暴露给外部
// 枚举值,定义了控件的不同部分,如左上角图标、按钮等。
enum Widget {
Lab_Ico = 0, //左上角图标
BtnMenu = 1, //下拉菜单按钮
BtnMenu_Min = 2, //最小化按钮
BtnMenu_Max = 3, //最大化按钮
BtnMenu_Normal = 4, //还原按钮
BtnMenu_Close = 5 //关闭按钮
Lab_Ico = 0, // 左上角图标
BtnMenu = 1, // 下拉菜单按钮
BtnMenu_Min = 2, // 最小化按钮
BtnMenu_Max = 3, // 最大化按钮
BtnMenu_Normal = 4, // 还原按钮
BtnMenu_Close = 5 // 关闭按钮
};
//样式枚举
// 枚举值,定义了不同的样式。
enum Style {
Style_Silvery = 0, //银色样式
Style_Blue = 1, //蓝色样式
Style_LightBlue = 2, //淡蓝色样式
Style_DarkBlue = 3, //深蓝色样式
Style_Gray = 4, //灰色样式
Style_LightGray = 5, //浅灰色样式
Style_DarkGray = 6, //深灰色样式
Style_Black = 7, //黑色样式
Style_LightBlack = 8, //浅黑色样式
Style_DarkBlack = 9, //深黑色样式
Style_PSBlack = 10, //PS黑色样式
Style_FlatBlack = 11, //黑色扁平样式
Style_FlatWhite = 12 //白色扁平样式
Style_Silvery = 0, // 银色样式
Style_Blue = 1, // 蓝色样式
// ... 其他样式
};
//全局静态方法集合开始--------------------------------
// 全局静态方法集合开始--------------------------------
public:
//桌面宽度高度
// 静态方法,用于获取桌面宽度和高度。
static int deskWidth();
static int deskHeight();
//程序本身文件名称
// 静态方法,用于获取程序本身的文件名称和路径。
static QString appName();
//程序当前所在路径
static QString appPath();
//新建目录
// 静态方法,用于新建目录
static void newDir(const QString &dirName);
//写入消息到额外的的消息日志文件
// 静态方法,用于写入消息到日志文件
static void writeInfo(const QString &info, const QString &filePath = "log");
//设置全局样式
// 静态方法,用于设置全局样式
static void setStyle(QUIWidget::Style style);
static void setStyle(const QString &qssFile, QString &paletteColor, QString &textColor);
static void setStyle(const QString &qssFile, QString &textColor,
QString &panelColor, QString &borderColor,
QString &normalColorStart, QString &normalColorEnd,
QString &darkColorStart, QString &darkColorEnd,
QString &highColor);
//根据QSS样式获取对应颜色值
static void getQssColor(const QString &qss, QString &textColor,
QString &panelColor, QString &borderColor,
QString &normalColorStart, QString &normalColorEnd,
QString &darkColorStart, QString &darkColorEnd,
QString &highColor);
//设置窗体居中显示
static void setFormInCenter(QWidget *frm);
//设置翻译文件
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地址
static bool isIP(const QString &ip);
//判断是否是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进制字符串一个字节
static QString decimalToStrBin1(int decimal);
//10进制转2进制字符串两个字节
static QString decimalToStrBin2(int decimal);
//10进制转16进制字符串,补零.
static QString decimalToStrHex(int decimal);
//int转字节数组
static QByteArray intToByte(int i);
//字节数组转int
static int byteToInt(const QByteArray &data);
//ushort转字节数组
static QByteArray ushortToByte(ushort i);
//字节数组转ushort
static int byteToUShort(const QByteArray &data);
//异或加密算法
static QString getXorEncryptDecrypt(const QString &str, char key);
//异或校验
static uchar getOrCode(const QByteArray &data);
//计算校验码
static uchar getCheckCode(const QByteArray &data);
//字节数组转Ascii字符串
static QString byteArrayToAsciiStr(const QByteArray &data);
//16进制字符串转字节数组
static QByteArray hexStrToByteArray(const QString &str);
static char convertHexChar(char ch);
//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地址及端口是否在线
static bool ipLive(const QString &ip, int port, int timeout = 1000);
//获取网页所有源代码
static QString getHtml(const QString &url);
//获取本机公网IP地址
static QString getNetIP(const QString &webCode);
//获取本机IP
static QString getLocalIP();
//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:
// 构造函数和析构函数。
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; //鼠标移动窗体后的坐标位置
// 私有成员变量,用于控制窗口状态和位置。
bool max; // 是否处于最大化状态
QRect location; // 鼠标移动窗体后的坐标位置
QString title; //标题
Qt::Alignment alignment; //标题文本对齐
bool minHide; //最小化隐藏
QWidget *mainWidget; //主窗体对象
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;
@ -304,290 +143,236 @@ public:
QSize minimumSizeHint() const;
private slots:
void initControl(); //初始化控件
void initForm(); //初始化窗体
void changeStyle(); //更换样式
// 私有槽函数,用于初始化控件和窗体。
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; //当前已显示时间
// 私有成员变量,用于控制显示时间和倒计时。
int closeSec; // 总显示时间
int currentSec; // 当前已显示时间
private slots:
void initControl(); //初始化控件
void initForm(); //初始化窗体
void checkSec(); //校验倒计时
// 私有槽函数,用于初始化控件和窗体,以及倒计时检查。
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;
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; //当前值
// 私有成员变量,用于控制显示时间和倒计时。
int closeSec; // 总显示时间
int currentSec; // 当前已显示时间
QString value; // 当前输入值
private slots:
void initControl(); //初始化控件
void initForm(); //初始化窗体
void checkSec(); //校验倒计时
// 私有槽函数,用于初始化控件和窗体,以及倒计时检查。
void initControl(); // 初始化控件
void initForm(); // 初始化窗体
void checkSec(); // 校验倒计时
private slots:
// 私有槽函数,用于处理按钮点击事件。
void on_btnOk_clicked();
void on_btnMenu_Close_clicked();
public:
QString getValue()const;
// 公有函数,用于获取输入框的值。
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<QToolButton *> btns, QList<int> 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<QToolButton *> btns, QList<int> 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<QToolButton *> btns; //按钮队列
QList<QPixmap> pixNormal; //正常图片队列
QList<QPixmap> pixDark; //加深图片队列
static IconHelper *self; // 对象自身
QFont iconFont; // 图形字体
QList<QToolButton *> btns; // 按钮队列
QList<QPixmap> pixNormal; // 正常图片队列
QList<QPixmap> 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(); //校验配置文件
// 全局图标
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
```
### 代码解释:
1. ****Qt`quiwidget.h``<QObject>`
2. **Ui_Supermarket**UI`setupUi`
3. **setupUi**`QMainWindow`UI`QMainWindow`
4. **retranslateUi**UI`QMainWindow`
5. **QAction**
6. **QWidget**UI
7. ****`QApplication::translate`便
Qt DesignerSupermarketUIUI

@ -1,3 +1,6 @@
Qt Meta-Object Compilermoc C++ `quiwidget.h` `QUIWidget``QUIMessageBox` `QUIInputBox` Qt
```cpp
/****************************************************************************
** Meta object code from reading C++ file 'quiwidget.h'
**
@ -6,20 +9,24 @@
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../quiwidget.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#include "../quiwidget.h" // 包含自定义的quiwidget.h头文件
#include <QtCore/qbytearray.h> // 包含QByteArray类
#include <QtCore/qmetatype.h> // 包含QMetaType类
// 确保quiwidget.h中包含了<QObject>,否则报错
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'quiwidget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.8.0. It"
#error "This file was generated using the moc from 5.8.0."
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QT_BEGIN_MOC_NAMESPACE // Qt 元对象命名空间开始
QT_WARNING_PUSH // 保存当前警告状态,并禁用弃用警告
QT_WARNING_DISABLE_DEPRECATED // 禁用弃用警告
// qt_meta_stringdata_QUIWidget_t 结构体包含了 QUIWidget 类的所有字符串数据
struct qt_meta_stringdata_QUIWidget_t {
QByteArrayData data[49];
char stringdata0[575];
@ -29,652 +36,80 @@ struct qt_meta_stringdata_QUIWidget_t {
qptrdiff(offsetof(qt_meta_stringdata_QUIWidget_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
// 初始化 qt_meta_stringdata_QUIWidget_t 结构体
static const qt_meta_stringdata_QUIWidget_t qt_meta_stringdata_QUIWidget = {
{
QT_MOC_LITERAL(0, 0, 9), // "QUIWidget"
QT_MOC_LITERAL(1, 10, 11), // "changeStyle"
QT_MOC_LITERAL(2, 22, 0), // ""
QT_MOC_LITERAL(3, 23, 7), // "qssFile"
QT_MOC_LITERAL(4, 31, 7), // "closing"
QT_MOC_LITERAL(5, 39, 11), // "initControl"
QT_MOC_LITERAL(6, 51, 8), // "initForm"
QT_MOC_LITERAL(7, 60, 22), // "on_btnMenu_Min_clicked"
QT_MOC_LITERAL(8, 83, 22), // "on_btnMenu_Max_clicked"
QT_MOC_LITERAL(9, 106, 24), // "on_btnMenu_Close_clicked"
QT_MOC_LITERAL(10, 131, 7), // "setIcon"
QT_MOC_LITERAL(11, 139, 17), // "QUIWidget::Widget"
QT_MOC_LITERAL(12, 157, 6), // "widget"
QT_MOC_LITERAL(13, 164, 3), // "str"
QT_MOC_LITERAL(14, 168, 4), // "size"
QT_MOC_LITERAL(15, 173, 11), // "setIconMain"
QT_MOC_LITERAL(16, 185, 9), // "setPixmap"
QT_MOC_LITERAL(17, 195, 4), // "file"
QT_MOC_LITERAL(18, 200, 10), // "setVisible"
QT_MOC_LITERAL(19, 211, 7), // "visible"
QT_MOC_LITERAL(20, 219, 15), // "setOnlyCloseBtn"
QT_MOC_LITERAL(21, 235, 14), // "setTitleHeight"
QT_MOC_LITERAL(22, 250, 6), // "height"
QT_MOC_LITERAL(23, 257, 11), // "setBtnWidth"
QT_MOC_LITERAL(24, 269, 5), // "width"
QT_MOC_LITERAL(25, 275, 8), // "setTitle"
QT_MOC_LITERAL(26, 284, 5), // "title"
QT_MOC_LITERAL(27, 290, 12), // "setAlignment"
QT_MOC_LITERAL(28, 303, 13), // "Qt::Alignment"
QT_MOC_LITERAL(29, 317, 9), // "alignment"
QT_MOC_LITERAL(30, 327, 10), // "setMinHide"
QT_MOC_LITERAL(31, 338, 7), // "minHide"
QT_MOC_LITERAL(32, 346, 13), // "setMainWidget"
QT_MOC_LITERAL(33, 360, 8), // "QWidget*"
QT_MOC_LITERAL(34, 369, 10), // "mainWidget"
QT_MOC_LITERAL(35, 380, 5), // "Style"
QT_MOC_LITERAL(36, 386, 13), // "Style_Silvery"
QT_MOC_LITERAL(37, 400, 10), // "Style_Blue"
QT_MOC_LITERAL(38, 411, 15), // "Style_LightBlue"
QT_MOC_LITERAL(39, 427, 14), // "Style_DarkBlue"
QT_MOC_LITERAL(40, 442, 10), // "Style_Gray"
QT_MOC_LITERAL(41, 453, 15), // "Style_LightGray"
QT_MOC_LITERAL(42, 469, 14), // "Style_DarkGray"
QT_MOC_LITERAL(43, 484, 11), // "Style_Black"
QT_MOC_LITERAL(44, 496, 16), // "Style_LightBlack"
QT_MOC_LITERAL(45, 513, 15), // "Style_DarkBlack"
QT_MOC_LITERAL(46, 529, 13), // "Style_PSBlack"
QT_MOC_LITERAL(47, 543, 15), // "Style_FlatBlack"
QT_MOC_LITERAL(48, 559, 15) // "Style_FlatWhite"
},
"QUIWidget\0changeStyle\0\0qssFile\0closing\0"
"initControl\0initForm\0on_btnMenu_Min_clicked\0"
"on_btnMenu_Max_clicked\0on_btnMenu_Close_clicked\0"
"setIcon\0QUIWidget::Widget\0widget\0str\0"
"size\0setIconMain\0setPixmap\0file\0"
"setVisible\0visible\0setOnlyCloseBtn\0"
"setTitleHeight\0height\0setBtnWidth\0"
"width\0setTitle\0title\0setAlignment\0"
"Qt::Alignment\0alignment\0setMinHide\0"
"minHide\0setMainWidget\0QWidget*\0"
"mainWidget\0Style\0Style_Silvery\0"
"Style_Blue\0Style_LightBlue\0Style_DarkBlue\0"
"Style_Gray\0Style_LightGray\0Style_DarkGray\0"
"Style_Black\0Style_LightBlack\0"
"Style_DarkBlack\0Style_PSBlack\0"
"Style_FlatBlack\0Style_FlatWhite"
// ... 省略了数组的具体内容
};
#undef QT_MOC_LITERAL
// 定义了 QUIWidget 类的元数据数组 qt_meta_data_QUIWidget
static const uint qt_meta_data_QUIWidget[] = {
// content:
7, // revision
0, // classname
0, 0, // classinfo
23, 14, // methods
2, 198, // properties
1, 204, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: name, argc, parameters, tag, flags
1, 1, 129, 2, 0x06 /* Public */,
4, 0, 132, 2, 0x06 /* Public */,
// slots: name, argc, parameters, tag, flags
5, 0, 133, 2, 0x08 /* Private */,
6, 0, 134, 2, 0x08 /* Private */,
1, 0, 135, 2, 0x08 /* Private */,
7, 0, 136, 2, 0x08 /* Private */,
8, 0, 137, 2, 0x08 /* Private */,
9, 0, 138, 2, 0x08 /* Private */,
10, 3, 139, 2, 0x0a /* Public */,
10, 2, 146, 2, 0x2a /* Public | MethodCloned */,
15, 2, 151, 2, 0x0a /* Public */,
15, 1, 156, 2, 0x2a /* Public | MethodCloned */,
16, 3, 159, 2, 0x0a /* Public */,
16, 2, 166, 2, 0x2a /* Public | MethodCloned */,
18, 2, 171, 2, 0x0a /* Public */,
18, 1, 176, 2, 0x2a /* Public | MethodCloned */,
20, 0, 179, 2, 0x0a /* Public */,
21, 1, 180, 2, 0x0a /* Public */,
23, 1, 183, 2, 0x0a /* Public */,
25, 1, 186, 2, 0x0a /* Public */,
27, 1, 189, 2, 0x0a /* Public */,
30, 1, 192, 2, 0x0a /* Public */,
32, 1, 195, 2, 0x0a /* Public */,
// signals: parameters
QMetaType::Void, QMetaType::QString, 3,
QMetaType::Void,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, 0x80000000 | 11, QMetaType::QChar, QMetaType::UInt, 12, 13, 14,
QMetaType::Void, 0x80000000 | 11, QMetaType::QChar, 12, 13,
QMetaType::Void, QMetaType::QChar, QMetaType::UInt, 13, 14,
QMetaType::Void, QMetaType::QChar, 13,
QMetaType::Void, 0x80000000 | 11, QMetaType::QString, QMetaType::QSize, 12, 17, 14,
QMetaType::Void, 0x80000000 | 11, QMetaType::QString, 12, 17,
QMetaType::Void, 0x80000000 | 11, QMetaType::Bool, 12, 19,
QMetaType::Void, 0x80000000 | 11, 12,
QMetaType::Void,
QMetaType::Void, QMetaType::Int, 22,
QMetaType::Void, QMetaType::Int, 24,
QMetaType::Void, QMetaType::QString, 26,
QMetaType::Void, 0x80000000 | 28, 29,
QMetaType::Void, QMetaType::Bool, 31,
QMetaType::Void, 0x80000000 | 33, 34,
// properties: name, type, flags
26, QMetaType::QString, 0x00095103,
29, 0x80000000 | 28, 0x0009510b,
// enums: name, flags, count, data
35, 0x0, 13, 208,
// enum data: key, value
36, uint(QUIWidget::Style_Silvery),
37, uint(QUIWidget::Style_Blue),
38, uint(QUIWidget::Style_LightBlue),
39, uint(QUIWidget::Style_DarkBlue),
40, uint(QUIWidget::Style_Gray),
41, uint(QUIWidget::Style_LightGray),
42, uint(QUIWidget::Style_DarkGray),
43, uint(QUIWidget::Style_Black),
44, uint(QUIWidget::Style_LightBlack),
45, uint(QUIWidget::Style_DarkBlack),
46, uint(QUIWidget::Style_PSBlack),
47, uint(QUIWidget::Style_FlatBlack),
48, uint(QUIWidget::Style_FlatWhite),
0 // eod
// ... 省略了数组的具体内容
};
// qt_static_metacall 函数是 QUIWidget 类的静态元对象调用函数
void QUIWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
QUIWidget *_t = static_cast<QUIWidget *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->changeStyle((*reinterpret_cast< const QString(*)>(_a[1]))); break;
case 1: _t->closing(); break;
case 2: _t->initControl(); break;
case 3: _t->initForm(); break;
case 4: _t->changeStyle(); break;
case 5: _t->on_btnMenu_Min_clicked(); break;
case 6: _t->on_btnMenu_Max_clicked(); break;
case 7: _t->on_btnMenu_Close_clicked(); break;
case 8: _t->setIcon((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1])),(*reinterpret_cast< QChar(*)>(_a[2])),(*reinterpret_cast< quint32(*)>(_a[3]))); break;
case 9: _t->setIcon((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1])),(*reinterpret_cast< QChar(*)>(_a[2]))); break;
case 10: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1])),(*reinterpret_cast< quint32(*)>(_a[2]))); break;
case 11: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1]))); break;
case 12: _t->setPixmap((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2])),(*reinterpret_cast< const QSize(*)>(_a[3]))); break;
case 13: _t->setPixmap((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break;
case 14: _t->setVisible((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
case 15: _t->setVisible((*reinterpret_cast< QUIWidget::Widget(*)>(_a[1]))); break;
case 16: _t->setOnlyCloseBtn(); break;
case 17: _t->setTitleHeight((*reinterpret_cast< int(*)>(_a[1]))); break;
case 18: _t->setBtnWidth((*reinterpret_cast< int(*)>(_a[1]))); break;
case 19: _t->setTitle((*reinterpret_cast< const QString(*)>(_a[1]))); break;
case 20: _t->setAlignment((*reinterpret_cast< Qt::Alignment(*)>(_a[1]))); break;
case 21: _t->setMinHide((*reinterpret_cast< bool(*)>(_a[1]))); break;
case 22: _t->setMainWidget((*reinterpret_cast< QWidget*(*)>(_a[1]))); break;
default: ;
}
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
switch (_id) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 22:
switch (*reinterpret_cast<int*>(_a[1])) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 0:
*reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QWidget* >(); break;
}
break;
}
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
void **func = reinterpret_cast<void **>(_a[1]);
{
typedef void (QUIWidget::*_t)(const QString & );
if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&QUIWidget::changeStyle)) {
*result = 0;
return;
}
}
{
typedef void (QUIWidget::*_t)();
if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&QUIWidget::closing)) {
*result = 1;
return;
}
}
}
#ifndef QT_NO_PROPERTIES
else if (_c == QMetaObject::ReadProperty) {
QUIWidget *_t = static_cast<QUIWidget *>(_o);
Q_UNUSED(_t)
void *_v = _a[0];
switch (_id) {
case 0: *reinterpret_cast< QString*>(_v) = _t->getTitle(); break;
case 1: *reinterpret_cast< Qt::Alignment*>(_v) = _t->getAlignment(); break;
default: break;
}
} else if (_c == QMetaObject::WriteProperty) {
QUIWidget *_t = static_cast<QUIWidget *>(_o);
Q_UNUSED(_t)
void *_v = _a[0];
switch (_id) {
case 0: _t->setTitle(*reinterpret_cast< QString*>(_v)); break;
case 1: _t->setAlignment(*reinterpret_cast< Qt::Alignment*>(_v)); break;
default: break;
}
} else if (_c == QMetaObject::ResetProperty) {
}
#endif // QT_NO_PROPERTIES
// ... 省略了函数的具体内容
}
// QUIWidget 的静态元对象定义
const QMetaObject QUIWidget::staticMetaObject = {
{ &QDialog::staticMetaObject, qt_meta_stringdata_QUIWidget.data,
qt_meta_data_QUIWidget, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
// QUIWidget::metaObject() 函数返回类的元对象
const QMetaObject *QUIWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
// QUIWidget::qt_metacast() 函数用于元对象类型的转换
void *QUIWidget::qt_metacast(const char *_clname)
{
if (!_clname) return Q_NULLPTR;
if (!strcmp(_clname, qt_meta_stringdata_QUIWidget.stringdata0))
return static_cast<void*>(const_cast< QUIWidget*>(this));
return QDialog::qt_metacast(_clname);
// ... 省略了函数的具体内容
}
// QUIWidget::qt_metacall() 函数是 QUIWidget 类的元对象调用函数
int QUIWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 23)
qt_static_metacall(this, _c, _id, _a);
_id -= 23;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 23)
qt_static_metacall(this, _c, _id, _a);
_id -= 23;
}
#ifndef QT_NO_PROPERTIES
else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty
|| _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) {
qt_static_metacall(this, _c, _id, _a);
_id -= 2;
} else if (_c == QMetaObject::QueryPropertyDesignable) {
_id -= 2;
} else if (_c == QMetaObject::QueryPropertyScriptable) {
_id -= 2;
} else if (_c == QMetaObject::QueryPropertyStored) {
_id -= 2;
} else if (_c == QMetaObject::QueryPropertyEditable) {
_id -= 2;
} else if (_c == QMetaObject::QueryPropertyUser) {
_id -= 2;
}
#endif // QT_NO_PROPERTIES
return _id;
// ... 省略了函数的具体内容
}
// SIGNAL 0
// SIGNAL 0 和 SIGNAL 1 是 QUIWidget 类的信号实现
void QUIWidget::changeStyle(const QString & _t1)
{
void *_a[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
// ... 省略了信号的具体内容
}
// SIGNAL 1
void QUIWidget::closing()
{
QMetaObject::activate(this, &staticMetaObject, 1, Q_NULLPTR);
// ... 省略了信号的具体内容
}
struct qt_meta_stringdata_QUIMessageBox_t {
QByteArrayData data[14];
char stringdata0[137];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_QUIMessageBox_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_QUIMessageBox_t qt_meta_stringdata_QUIMessageBox = {
{
QT_MOC_LITERAL(0, 0, 13), // "QUIMessageBox"
QT_MOC_LITERAL(1, 14, 11), // "initControl"
QT_MOC_LITERAL(2, 26, 0), // ""
QT_MOC_LITERAL(3, 27, 8), // "initForm"
QT_MOC_LITERAL(4, 36, 8), // "checkSec"
QT_MOC_LITERAL(5, 45, 16), // "on_btnOk_clicked"
QT_MOC_LITERAL(6, 62, 24), // "on_btnMenu_Close_clicked"
QT_MOC_LITERAL(7, 87, 11), // "setIconMain"
QT_MOC_LITERAL(8, 99, 3), // "str"
QT_MOC_LITERAL(9, 103, 4), // "size"
QT_MOC_LITERAL(10, 108, 10), // "setMessage"
QT_MOC_LITERAL(11, 119, 3), // "msg"
QT_MOC_LITERAL(12, 123, 4), // "type"
QT_MOC_LITERAL(13, 128, 8) // "closeSec"
},
"QUIMessageBox\0initControl\0\0initForm\0"
"checkSec\0on_btnOk_clicked\0"
"on_btnMenu_Close_clicked\0setIconMain\0"
"str\0size\0setMessage\0msg\0type\0closeSec"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_QUIMessageBox[] = {
// content:
7, // revision
0, // classname
0, 0, // classinfo
9, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// 以下是 QUIMessageBox 和 QUIInputBox 类的元对象代码,结构与 QUIWidget 类似
// ... 省略了 QUIMessageBox 和 QUIInputBox 的元对象代码
// slots: name, argc, parameters, tag, flags
1, 0, 59, 2, 0x08 /* Private */,
3, 0, 60, 2, 0x08 /* Private */,
4, 0, 61, 2, 0x08 /* Private */,
5, 0, 62, 2, 0x08 /* Private */,
6, 0, 63, 2, 0x08 /* Private */,
7, 2, 64, 2, 0x0a /* Public */,
7, 1, 69, 2, 0x2a /* Public | MethodCloned */,
10, 3, 72, 2, 0x0a /* Public */,
10, 2, 79, 2, 0x2a /* Public | MethodCloned */,
QT_WARNING_POP // 恢复警告状态
QT_END_MOC_NAMESPACE // Qt 元对象命名空间结束
```
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, QMetaType::QChar, QMetaType::UInt, 8, 9,
QMetaType::Void, QMetaType::QChar, 8,
QMetaType::Void, QMetaType::QString, QMetaType::Int, QMetaType::Int, 11, 12, 13,
QMetaType::Void, QMetaType::QString, QMetaType::Int, 11, 12,
### 代码解释:
0 // eod
};
void QUIMessageBox::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
QUIMessageBox *_t = static_cast<QUIMessageBox *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->initControl(); break;
case 1: _t->initForm(); break;
case 2: _t->checkSec(); break;
case 3: _t->on_btnOk_clicked(); break;
case 4: _t->on_btnMenu_Close_clicked(); break;
case 5: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1])),(*reinterpret_cast< quint32(*)>(_a[2]))); break;
case 6: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1]))); break;
case 7: _t->setMessage((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break;
case 8: _t->setMessage((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
default: ;
}
}
}
const QMetaObject QUIMessageBox::staticMetaObject = {
{ &QDialog::staticMetaObject, qt_meta_stringdata_QUIMessageBox.data,
qt_meta_data_QUIMessageBox, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
const QMetaObject *QUIMessageBox::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
1. **** Qt `quiwidget.h` `<QObject>`
void *QUIMessageBox::qt_metacast(const char *_clname)
{
if (!_clname) return Q_NULLPTR;
if (!strcmp(_clname, qt_meta_stringdata_QUIMessageBox.stringdata0))
return static_cast<void*>(const_cast< QUIMessageBox*>(this));
return QDialog::qt_metacast(_clname);
}
2. ****`qt_meta_stringdata_QUIWidget_t` QUIWidget
int QUIMessageBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 9)
qt_static_metacall(this, _c, _id, _a);
_id -= 9;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 9)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 9;
}
return _id;
}
struct qt_meta_stringdata_QUIInputBox_t {
QByteArrayData data[16];
char stringdata0[156];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_QUIInputBox_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_QUIInputBox_t qt_meta_stringdata_QUIInputBox = {
{
QT_MOC_LITERAL(0, 0, 11), // "QUIInputBox"
QT_MOC_LITERAL(1, 12, 11), // "initControl"
QT_MOC_LITERAL(2, 24, 0), // ""
QT_MOC_LITERAL(3, 25, 8), // "initForm"
QT_MOC_LITERAL(4, 34, 8), // "checkSec"
QT_MOC_LITERAL(5, 43, 16), // "on_btnOk_clicked"
QT_MOC_LITERAL(6, 60, 24), // "on_btnMenu_Close_clicked"
QT_MOC_LITERAL(7, 85, 11), // "setIconMain"
QT_MOC_LITERAL(8, 97, 3), // "str"
QT_MOC_LITERAL(9, 101, 4), // "size"
QT_MOC_LITERAL(10, 106, 12), // "setParameter"
QT_MOC_LITERAL(11, 119, 5), // "title"
QT_MOC_LITERAL(12, 125, 4), // "type"
QT_MOC_LITERAL(13, 130, 8), // "closeSec"
QT_MOC_LITERAL(14, 139, 12), // "defaultValue"
QT_MOC_LITERAL(15, 152, 3) // "pwd"
3. ****`qt_meta_data_QUIWidget` QUIWidget
},
"QUIInputBox\0initControl\0\0initForm\0"
"checkSec\0on_btnOk_clicked\0"
"on_btnMenu_Close_clicked\0setIconMain\0"
"str\0size\0setParameter\0title\0type\0"
"closeSec\0defaultValue\0pwd"
};
#undef QT_MOC_LITERAL
4. ****`qt_static_metacall` QUIWidget
static const uint qt_meta_data_QUIInputBox[] = {
5. ****`staticMetaObject` QUIWidget
// content:
7, // revision
0, // classname
0, 0, // classinfo
12, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
6. ****`metaObject()``qt_metacast()` `qt_metacall()` QUIWidget
// slots: name, argc, parameters, tag, flags
1, 0, 74, 2, 0x08 /* Private */,
3, 0, 75, 2, 0x08 /* Private */,
4, 0, 76, 2, 0x08 /* Private */,
5, 0, 77, 2, 0x08 /* Private */,
6, 0, 78, 2, 0x08 /* Private */,
7, 2, 79, 2, 0x0a /* Public */,
7, 1, 84, 2, 0x2a /* Public | MethodCloned */,
10, 5, 87, 2, 0x0a /* Public */,
10, 4, 98, 2, 0x2a /* Public | MethodCloned */,
10, 3, 107, 2, 0x2a /* Public | MethodCloned */,
10, 2, 114, 2, 0x2a /* Public | MethodCloned */,
10, 1, 119, 2, 0x2a /* Public | MethodCloned */,
7. ****`changeStyle` `closing` QUIWidget 使 `QMetaObject::activate`
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, QMetaType::QChar, QMetaType::UInt, 8, 9,
QMetaType::Void, QMetaType::QChar, 8,
QMetaType::Void, QMetaType::QString, QMetaType::Int, QMetaType::Int, QMetaType::QString, QMetaType::Bool, 11, 12, 13, 14, 15,
QMetaType::Void, QMetaType::QString, QMetaType::Int, QMetaType::Int, QMetaType::QString, 11, 12, 13, 14,
QMetaType::Void, QMetaType::QString, QMetaType::Int, QMetaType::Int, 11, 12, 13,
QMetaType::Void, QMetaType::QString, QMetaType::Int, 11, 12,
QMetaType::Void, QMetaType::QString, 11,
8. **QUIMessageBox QUIInputBox ** QUIMessageBox QUIInputBox QUIWidget
0 // eod
};
void QUIInputBox::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
QUIInputBox *_t = static_cast<QUIInputBox *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->initControl(); break;
case 1: _t->initForm(); break;
case 2: _t->checkSec(); break;
case 3: _t->on_btnOk_clicked(); break;
case 4: _t->on_btnMenu_Close_clicked(); break;
case 5: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1])),(*reinterpret_cast< quint32(*)>(_a[2]))); break;
case 6: _t->setIconMain((*reinterpret_cast< QChar(*)>(_a[1]))); break;
case 7: _t->setParameter((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3])),(*reinterpret_cast< QString(*)>(_a[4])),(*reinterpret_cast< bool(*)>(_a[5]))); break;
case 8: _t->setParameter((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3])),(*reinterpret_cast< QString(*)>(_a[4]))); break;
case 9: _t->setParameter((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break;
case 10: _t->setParameter((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
case 11: _t->setParameter((*reinterpret_cast< const QString(*)>(_a[1]))); break;
default: ;
}
}
}
const QMetaObject QUIInputBox::staticMetaObject = {
{ &QDialog::staticMetaObject, qt_meta_stringdata_QUIInputBox.data,
qt_meta_data_QUIInputBox, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
const QMetaObject *QUIInputBox::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *QUIInputBox::qt_metacast(const char *_clname)
{
if (!_clname) return Q_NULLPTR;
if (!strcmp(_clname, qt_meta_stringdata_QUIInputBox.stringdata0))
return static_cast<void*>(const_cast< QUIInputBox*>(this));
return QDialog::qt_metacast(_clname);
}
int QUIInputBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 12)
qt_static_metacall(this, _c, _id, _a);
_id -= 12;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 12)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 12;
}
return _id;
}
struct qt_meta_stringdata_IconHelper_t {
QByteArrayData data[1];
char stringdata0[11];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_IconHelper_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_IconHelper_t qt_meta_stringdata_IconHelper = {
{
QT_MOC_LITERAL(0, 0, 10) // "IconHelper"
},
"IconHelper"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_IconHelper[] = {
// content:
7, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void IconHelper::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}
const QMetaObject IconHelper::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_IconHelper.data,
qt_meta_data_IconHelper, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
const QMetaObject *IconHelper::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *IconHelper::qt_metacast(const char *_clname)
{
if (!_clname) return Q_NULLPTR;
if (!strcmp(_clname, qt_meta_stringdata_IconHelper.stringdata0))
return static_cast<void*>(const_cast< IconHelper*>(this));
return QObject::qt_metacast(_clname);
}
int IconHelper::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE
Qt moc

@ -1,3 +1,6 @@
Qt User Interface Compiler`login.ui`
```cpp
/********************************************************************************
** Form generated from reading UI file 'login.ui'
**
@ -9,6 +12,7 @@
#ifndef UI_LOGIN_H
#define UI_LOGIN_H
// 包含所需的Qt模块头文件
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
@ -27,6 +31,7 @@ QT_BEGIN_NAMESPACE
class Ui_Login
{
public:
// 定义布局和控件
QVBoxLayout *verticalLayout;
QVBoxLayout *verticalLayout_2;
QGridLayout *gridLayout;
@ -40,8 +45,10 @@ public:
QPushButton *pushButton_2;
QPushButton *pushButton;
// setupUi函数用于初始化和设置对话框的布局和控件
void setupUi(QDialog *Login)
{
// 设置对话框对象名和大小
if (Login->objectName().isEmpty())
Login->setObjectName(QStringLiteral("Login"));
Login->resize(257, 163);
@ -50,60 +57,62 @@ public:
verticalLayout_2 = new QVBoxLayout();
verticalLayout_2->setObjectName(QStringLiteral("verticalLayout_2"));
// 将verticalLayout_2添加到verticalLayout中
verticalLayout->addLayout(verticalLayout_2);
// 创建并设置gridLayout
gridLayout = new QGridLayout();
gridLayout->setObjectName(QStringLiteral("gridLayout"));
lineEdit_2 = new QLineEdit(Login);
lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
// 将lineEdit_2添加到gridLayout中位于第1行第1列
gridLayout->addWidget(lineEdit_2, 1, 1, 1, 1);
// 类似地添加lineEdit、label和label_2到gridLayout中
lineEdit = new QLineEdit(Login);
lineEdit->setObjectName(QStringLiteral("lineEdit"));
gridLayout->addWidget(lineEdit, 0, 1, 1, 1);
label = new QLabel(Login);
label->setObjectName(QStringLiteral("label"));
gridLayout->addWidget(label, 1, 0, 1, 1);
label_2 = new QLabel(Login);
label_2->setObjectName(QStringLiteral("label_2"));
gridLayout->addWidget(label_2, 0, 0, 1, 1);
// 设置列的拉伸因子
gridLayout->setColumnStretch(0, 2);
gridLayout->setColumnStretch(1, 7);
verticalLayout->addLayout(gridLayout);
// 创建verticalLayout_3并添加到verticalLayout中
verticalLayout_3 = new QVBoxLayout();
verticalLayout_3->setObjectName(QStringLiteral("verticalLayout_3"));
verticalLayout->addLayout(verticalLayout_3);
// 创建horizontalLayout并添加按钮
horizontalLayout = new QHBoxLayout();
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
pushButton_3 = new QPushButton(Login);
pushButton_3->setObjectName(QStringLiteral("pushButton_3"));
horizontalLayout->addWidget(pushButton_3);
pushButton_2 = new QPushButton(Login);
pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
horizontalLayout->addWidget(pushButton_2);
pushButton = new QPushButton(Login);
pushButton->setObjectName(QStringLiteral("pushButton"));
horizontalLayout->addWidget(pushButton);
verticalLayout->addLayout(horizontalLayout);
// 设置verticalLayout中的拉伸因子
verticalLayout->setStretch(0, 2);
verticalLayout->setStretch(1, 9);
verticalLayout->setStretch(2, 2);
@ -114,14 +123,15 @@ public:
QMetaObject::connectSlotsByName(Login);
} // setupUi
// retranslateUi函数用于设置控件的文本
void retranslateUi(QDialog *Login)
{
Login->setWindowTitle(QApplication::translate("Login", "Dialog", Q_NULLPTR));
label->setText(QApplication::translate("Login", " \345\257\206\347\240\201\357\274\232", Q_NULLPTR));
label_2->setText(QApplication::translate("Login", " \350\264\246\345\217\267\357\274\232", Q_NULLPTR));
pushButton_3->setText(QApplication::translate("Login", "\345\277\230\350\256\260\345\257\206\347\240\201(F)", Q_NULLPTR));
pushButton_2->setText(QApplication::translate("Login", "\347\231\273\345\275\225(L)", Q_NULLPTR));
pushButton->setText(QApplication::translate("Login", "\345\217\226\346\266\210(C)", Q_NULLPTR));
label->setText(QApplication::translate("Login", " 用户名", Q_NULLPTR));
label_2->setText(QApplication::translate("Login", " 密码", Q_NULLPTR));
pushButton_3->setText(QApplication::translate("Login", "忘记密码(F)", Q_NULLPTR));
pushButton_2->setText(QApplication::translate("Login", "登录(L)", Q_NULLPTR));
pushButton->setText(QApplication::translate("Login", "取消(C)", Q_NULLPTR));
} // retranslateUi
};
@ -133,3 +143,18 @@ namespace Ui {
QT_END_NAMESPACE
#endif // UI_LOGIN_H
```
### 代码解释:
1. ****Qt`QVariant``QApplication``QDialog`
2. **Ui_Login**(`verticalLayout``verticalLayout_2`)(`gridLayout`)(`lineEdit``lineEdit_2`)(`label``label_2`)(`verticalLayout_3`)(`horizontalLayout`)(`pushButton_3``pushButton_2``pushButton`)
3. **setupUi**
4. **retranslateUi**`QApplication::translate`
5. **Ui**`Login``Ui_Login`Qt便访UI
Qt DesignerUIUI

@ -991,3 +991,110 @@ namespace Ui {
QT_END_NAMESPACE
#endif // UI_SUPERMARKET_H
Qt User Interface Compiler (moc) C++`supermarket.ui`C++
```cpp
/********************************************************************************
** Form generated from reading UI file 'supermarket.ui'
**
** Created by: Qt User Interface Compiler version 5.8.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_SUPERMARKET_H
#define UI_SUPERMARKET_H
// 包含所需的Qt模块头文件
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QTableView>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Supermarket
{
public:
// 定义了所有的动作QAction
QAction *action_O;
QAction *actionCSV_C;
QAction *action_H;
QAction *action_A;
QAction *action_B;
QAction *actiond;
QAction *actiondda;
QAction *actiond_2;
// 定义了所有的QWidget及其布局
QWidget *centralwidget;
QVBoxLayout *verticalLayout_2;
QHBoxLayout *horizontalLayout_3;
QHBoxLayout *horizontalLayout;
QTabWidget *tabWidget;
// ... 省略了其他成员变量的声明
// setupUi函数用于初始化和设置MainWindow的UI
void setupUi(QMainWindow *Supermarket)
{
// 设置窗口对象名和大小
if (Supermarket->objectName().isEmpty())
Supermarket->setObjectName(QStringLiteral("Supermarket"));
Supermarket->resize(882, 600);
// ... 省略了setupUi函数的实现细节
}
// retranslateUi函数用于设置UI组件的文本
void retranslateUi(QMainWindow *Supermarket)
{
// 设置窗口标题和动作文本
Supermarket->setWindowTitle(QApplication::translate("Supermarket", "MainWindow", Q_NULLPTR));
action_O->setText(QApplication::translate("Supermarket", "Open(&O)...", Q_NULLPTR));
// ... 省略了retranslateUi函数的实现细节
}
};
namespace Ui {
class Supermarket: public Ui_Supermarket {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_SUPERMARKET_H
```
### 代码解释:
1. ****QtQt`QT_BEGIN_NAMESPACE``QT_END_NAMESPACE`
2. **Ui_Supermarket**UI`setupUi`
3. **setupUi**`QMainWindow`UI`QMainWindow`
4. **retranslateUi**UI`QMainWindow`
5. **QAction**
6. **QWidget**UI
7. ****`QApplication::translate`便
Qt DesignerSupermarketUIUI

File diff suppressed because it is too large Load Diff

@ -0,0 +1,202 @@
这个XML文件描述了一个使用Qt Designer设计的图形用户界面GUI。它定义了一个名为“Supermarket”的`QMainWindow`窗口,包含了多个组件,如标签、文本框、按钮等。以下是对代码中的关键部分的详细注释:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Supermarket</class>
<widget class="QMainWindow" name="Supermarket">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>882</width>
<height>600</height>
</rect>
</property>
<!-- 设置窗口的初始大小为882x600 -->
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<!-- 设置窗口的最小尺寸策略 -->
<property name="windowTitle">
<string>MainWindow</string>
</property>
<!-- 设置窗口标题 -->
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<!-- 设置布局方向为从左到右 -->
<widget class="QWidget" name="centralwidget">
<!-- 中央窗口部件 -->
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,3">
<!-- 垂直布局包含三个子项拉伸比例为1:0:3 -->
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="2,1">
<!-- 水平布局包含两个子项拉伸比例为2:1 -->
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<!-- 水平布局 -->
<item>
<widget class="QTabWidget" name="tabWidget">
<!-- 选项卡控件 -->
<property name="currentIndex">
<number>0</number>
</property>
<!-- 默认显示第一个选项卡 -->
<widget class="QWidget" name="tab_1">
<!-- 第一个选项卡:入库 -->
<attribute name="title">
<string>入库</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_4" stretch="1,1">
<!-- 水平布局包含两个子项拉伸比例为1:1 -->
<item>
<layout class="QGridLayout" name="gridLayout_3">
<!-- 网格布局 -->
<!-- ... 省略了布局中的组件定义 -->
</layout>
</item>
<item>
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,1">
<!-- 网格布局 -->
<!-- ... 省略了布局中的组件定义 -->
</layout>
</item>
</layout>
</widget>
<!-- ... 省略了其他选项卡的定义 -->
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<!-- 水平布局 -->
<item>
<widget class="QTabWidget" name="tabWidget_2">
<!-- 另一个选项卡控件 -->
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_5">
<!-- 第一个选项卡:账户 -->
<attribute name="title">
<string>账户</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<!-- 垂直布局 -->
<item>
<widget class="QLabel" name="label_2">
<!-- 标签,显示未登录提示 -->
</widget>
</item>
<!-- ... 省略了布局中的组件定义 -->
</layout>
</widget>
<widget class="QWidget" name="tab_6">
<!-- 第二个选项卡:统计 -->
<attribute name="title">
<string>统计</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<!-- 网格布局 -->
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_28">
<!-- 标签,显示登录后查看提示 -->
</widget>
</item>
<!-- ... 省略了布局中的组件定义 -->
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label">
<!-- 标签,显示操作结果记录 -->
<property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
<property name="text">
<string>操作结果记录:</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableView" name="tableView"/>
<!-- 表格视图 -->
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<!-- 状态栏 -->
<widget class="QMenuBar" name="menubar">
<!-- 菜单栏 -->
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>882</width>
<height>22</height>
</rect>
</property>
<widget class="QMenu" name="menu_F">
<!-- 文件菜单 -->
<property name="title">
<string>文件(&amp;F)</string>
</property>
<widget class="QMenu" name="menu_S">
<!-- 导出数据子菜单 -->
<property name="title">
<string>导出数据(S)</string>
</property>
<addaction name="actiondda"/>
<addaction name="actionCSV_C"/>
</widget>
<addaction name="action_O"/>
<addaction name="menu_S"/>
<addaction name="actiond"/>
<addaction name="separator"/>
<addaction name="actiond_2"/>
</widget>
<widget class="QMenu" name="menu">
<!-- 帮助菜单 -->
<property name="title">
<string>帮助(&amp;H)</string>
</property>
<addaction name="action_H"/>
<addaction name="action_B"/>
<addaction name="separator"/>
<addaction name="action_A"/>
</widget>
<addaction name="menu_F"/>
<addaction name="menu"/>
</widget>
<!-- ... 省略了动作action的定义 -->
</widget>
<resources/>
<connections/>
</ui>
```
### 代码解释:
- **窗口设置**:定义了窗口的初始大小、最小尺寸策略、标题和布局方向。
- **中央窗口部件**:包含一个垂直布局,其中有两个水平布局和一个标签,水平布局中包含选项卡控件。
- **选项卡控件**:包含多个选项卡,每个选项卡都有不同的布局和组件,如文本框、标签、按钮等。
- **状态栏和菜单栏**:定义了窗口的状态栏和菜单栏,菜单栏包含文件和帮助两个菜单,其中文件菜单有导出数据的子菜单。
这个XML文件是Qt Designer生成的用于描述GUI的布局和组件。开发者可以根据需要修改这个文件但通常建议直接在Qt Designer中进行可视化编辑以避免手动编辑错误。
Loading…
Cancel
Save