Compare commits

..

No commits in common. 'main' and 'test1' have entirely different histories.
main ... test1

@ -1,8 +0,0 @@
<?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>

@ -1,9 +0,0 @@
<?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>

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

@ -1,34 +1,24 @@
// 包含QtCore模块提供了Qt的核心功能如对象树、事件处理、文件处理等。 #include <QtCore>
#include <QtCore>
// 包含QtGui模块提供了图形用户界面的基本功能如窗口管理、图形视图框架、基本的图形绘制等。
#include <QtGui> #include <QtGui>
// 包含QtNetwork模块提供了网络通信的功能如TCP/IP、UDP等。
#include <QtNetwork> #include <QtNetwork>
// 检查Qt版本是否大于5.0.0如果是则包含QtWidgets模块提供了构建图形用户界面所需的窗口组件。
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) #if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#include <QtWidgets> #include <QtWidgets>
#endif #endif
// 如果编译器是微软的Visual Studio 2010即_MSC_VER >= 1600则设置执行字符集为UTF-8。
#if _MSC_VER >= 1600 #if _MSC_VER >= 1600
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
#endif #endif
// 定义了一系列宏,用于快速获取当前时间、日期等格式化字符串。 #define TIMEMS qPrintable (QTime::currentTime().toString("HH:mm:ss zzz"))
#define TIMEMS qPrintable (QTime::currentTime().toString("HH:mm:ss zzz")) // 获取当前时间,包括时区信息 #define TIME qPrintable (QTime::currentTime().toString("HH:mm:ss"))
#define TIME qPrintable (QTime::currentTime().toString("HH:mm:ss")) // 获取当前时间 #define QDATE qPrintable (QDate::currentDate().toString("yyyy-MM-dd"))
#define QDATE qPrintable (QDate::currentDate().toString("yyyy-MM-dd")) // 获取当前日期 #define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss"))
#define QTIME qPrintable (QTime::currentTime().toString("HH-mm-ss")) // 获取当前时间,分钟和秒为单个数字 #define DATETIME qPrintable (QDateTime::currentDateTime().toString("yyyy-MM-dd 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 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 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,139 +1,300 @@
#ifndef QUIWIDGET_H #ifndef QUIWIDGET_H
#define QUIWIDGET_H #define QUIWIDGET_H
// 包含QtCore模块提供了Qt的核心功能如对象树、事件处理、文件处理等。 #define TIMEMS qPrintable (QTime::currentTime().toString("HH:mm:ss zzz"))
#include <QtCore> #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"))
// 包含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 #ifdef Q_OS_WIN
#define NEWLINE "\r\n" // Windows系统使用回车和换行 #define NEWLINE "\r\n"
#else #else
#define NEWLINE "\n" // 其他系统使用换行 #define NEWLINE "\n"
#endif #endif
/** /**
* QUI * 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" #include "head.h"
// 根据是否在Qt Designer中使用包含不同的头文件
#ifdef quc #ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget> // Qt 5.7 以下版本 #include <QtDesigner/QDesignerExportWidget>
#else #else
#include <QtUiPlugin/QDesignerExportWidget> // Qt 5.7 及以上版本 #include <QtUiPlugin/QDesignerExportWidget>
#endif #endif
// 导出QUIWidget类使其在Qt Designer中可用
class QDESIGNER_WIDGET_EXPORT QUIWidget : public QDialog class QDESIGNER_WIDGET_EXPORT QUIWidget : public QDialog
#else #else
class QUIWidget : public QDialog class QUIWidget : public QDialog
#endif #endif
{ {
Q_OBJECT Q_OBJECT
Q_ENUMS(Style) // 枚举类型,定义样式 Q_ENUMS(Style)
Q_PROPERTY(QString title READ getTitle WRITE setTitle) // 属性,标题 Q_PROPERTY(QString title READ getTitle WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment) // 属性,标题对齐 Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
public: public:
// 枚举值,定义了控件的不同部分,如左上角图标、按钮等。 //将部分对象作为枚举值暴露给外部
enum Widget { enum Widget {
Lab_Ico = 0, // 左上角图标 Lab_Ico = 0, //左上角图标
BtnMenu = 1, // 下拉菜单按钮 BtnMenu = 1, //下拉菜单按钮
BtnMenu_Min = 2, // 最小化按钮 BtnMenu_Min = 2, //最小化按钮
BtnMenu_Max = 3, // 最大化按钮 BtnMenu_Max = 3, //最大化按钮
BtnMenu_Normal = 4, // 还原按钮 BtnMenu_Normal = 4, //还原按钮
BtnMenu_Close = 5 // 关闭按钮 BtnMenu_Close = 5 //关闭按钮
}; };
// 枚举值,定义了不同的样式。 //样式枚举
enum Style { enum Style {
Style_Silvery = 0, // 银色样式 Style_Silvery = 0, //银色样式
Style_Blue = 1, // 蓝色样式 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 //白色扁平样式
}; };
// 全局静态方法集合开始-------------------------------- //全局静态方法集合开始--------------------------------
public: public:
// 静态方法,用于获取桌面宽度和高度。 //桌面宽度高度
static int deskWidth(); static int deskWidth();
static int deskHeight(); static int deskHeight();
// 静态方法,用于获取程序本身的文件名称和路径。 //程序本身文件名称
static QString appName(); static QString appName();
//程序当前所在路径
static QString appPath(); static QString appPath();
// 静态方法,用于新建目录 //新建目录
static void newDir(const QString &dirName); static void newDir(const QString &dirName);
// 静态方法,用于写入消息到日志文件 //写入消息到额外的的消息日志文件
static void writeInfo(const QString &info, const QString &filePath = "log"); static void writeInfo(const QString &info, const QString &filePath = "log");
// 静态方法,用于设置全局样式 //设置全局样式
static void setStyle(QUIWidget::Style style); 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: public:
// 构造函数和析构函数。
explicit QUIWidget(QWidget *parent = 0); explicit QUIWidget(QWidget *parent = 0);
~QUIWidget(); ~QUIWidget();
protected: protected:
// 事件过滤器。
bool eventFilter(QObject *obj, QEvent *evt); bool eventFilter(QObject *obj, QEvent *evt);
private: private:
// 私有成员变量和布局、控件的定义。
QVBoxLayout *verticalLayout1; QVBoxLayout *verticalLayout1;
QWidget *widgetMain; 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: private:
// 私有成员变量,用于控制窗口状态和位置。 bool max; //是否处于最大化状态
bool max; // 是否处于最大化状态 QRect location; //鼠标移动窗体后的坐标位置
QRect location; // 鼠标移动窗体后的坐标位置
QString title; // 标题 QString title; //标题
Qt::Alignment alignment; // 标题文本对齐 Qt::Alignment alignment; //标题文本对齐
bool minHide; // 最小化隐藏 bool minHide; //最小化隐藏
QWidget *mainWidget; // 主窗体对象 QWidget *mainWidget; //主窗体对象
public: public:
// 公有槽函数,用于获取控件对象。
QLabel *getLabIco() const; QLabel *getLabIco() const;
// ... 其他公有槽函数 QLabel *getLabTitle() const;
QToolButton *getBtnMenu() const;
QPushButton *getBtnMenuMin() const;
QPushButton *getBtnMenuMax() const;
QPushButton *getBtnMenuMClose() const;
Style getStyle() const; Style getStyle() const;
QString getTitle() const; QString getTitle() const;
@ -143,236 +304,290 @@ public:
QSize minimumSizeHint() const; QSize minimumSizeHint() const;
private slots: private slots:
// 私有槽函数,用于初始化控件和窗体。 void initControl(); //初始化控件
void initControl(); // 初始化控件 void initForm(); //初始化窗体
void initForm(); // 初始化窗体 void changeStyle(); //更换样式
void changeStyle(); // 更换样式
private slots: private slots:
// 私有槽函数,用于处理按钮点击事件。
void on_btnMenu_Min_clicked(); void on_btnMenu_Min_clicked();
void on_btnMenu_Max_clicked(); void on_btnMenu_Max_clicked();
void on_btnMenu_Close_clicked(); void on_btnMenu_Close_clicked();
public Q_SLOTS: public Q_SLOTS:
// 公有槽函数,用于设置部件图标、图片和可见性。 //设置部件图标
void setIcon(QUIWidget::Widget widget, QChar str, quint32 size = 9); 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: Q_SIGNALS:
// 信号,用于通知样式变化和窗口关闭。
void changeStyle(const QString &qssFile); void changeStyle(const QString &qssFile);
void closing(); void closing();
}; };
// 弹出信息框类 //弹出信息框类
class QUIMessageBox : public QDialog class QUIMessageBox : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
// 构造函数和析构函数。
explicit QUIMessageBox(QWidget *parent = 0); explicit QUIMessageBox(QWidget *parent = 0);
~QUIMessageBox(); ~QUIMessageBox();
// 单例模式,用于获取消息框实例。
static QUIMessageBox *Instance() static QUIMessageBox *Instance()
{ {
static QMutex mutex; static QMutex mutex;
if (!self) { if (!self) {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
if (!self) { if (!self) {
self = new QUIMessageBox; self = new QUIMessageBox;
} }
} }
return self; return self;
} }
protected: protected:
// 事件过滤器和关闭事件处理。
void closeEvent(QCloseEvent *); void closeEvent(QCloseEvent *);
bool eventFilter(QObject *obj, QEvent *evt); bool eventFilter(QObject *obj, QEvent *evt);
private: private:
// 私有成员变量和控件的定义。 static QUIMessageBox *self;
QVBoxLayout *verticalLayout1; QVBoxLayout *verticalLayout1;
QWidget *widgetTitle; 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: private:
// 私有成员变量,用于控制显示时间和倒计时。 int closeSec; //总显示时间
int closeSec; // 总显示时间 int currentSec; //当前已显示时间
int currentSec; // 当前已显示时间
private slots: private slots:
// 私有槽函数,用于初始化控件和窗体,以及倒计时检查。 void initControl(); //初始化控件
void initControl(); // 初始化控件 void initForm(); //初始化窗体
void initForm(); // 初始化窗体 void checkSec(); //校验倒计时
void checkSec(); // 校验倒计时
private slots: private slots:
// 私有槽函数,用于处理按钮点击事件。
void on_btnOk_clicked(); void on_btnOk_clicked();
void on_btnMenu_Close_clicked(); void on_btnMenu_Close_clicked();
public Q_SLOTS: public Q_SLOTS:
// 公有槽函数,用于设置消息框内容和图标。
void setIconMain(QChar str, quint32 size = 9); void setIconMain(QChar str, quint32 size = 9);
void setMessage(const QString &msg, int type, int closeSec = 0); void setMessage(const QString &msg, int type, int closeSec = 0);
}; };
// 弹出输入框类 //弹出输入框类
class QUIInputBox : public QDialog class QUIInputBox : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
// 构造函数和析构函数。
explicit QUIInputBox(QWidget *parent = 0); explicit QUIInputBox(QWidget *parent = 0);
~QUIInputBox(); ~QUIInputBox();
// 单例模式,用于获取输入框实例。
static QUIInputBox *Instance() static QUIInputBox *Instance()
{ {
static QMutex mutex; static QMutex mutex;
if (!self) { if (!self) {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
if (!self) {
self =
new QUIInputBox; if (!self) {
self = new QUIInputBox;
} }
} }
return self; return self;
} }
protected: protected:
// 事件过滤器和关闭事件处理。
void closeEvent(QCloseEvent *); void closeEvent(QCloseEvent *);
bool eventFilter(QObject *obj, QEvent *evt); bool eventFilter(QObject *obj, QEvent *evt);
private: private:
// 私有成员变量和控件的定义。 static QUIInputBox *self;
QVBoxLayout *verticalLayout1; QVBoxLayout *verticalLayout1;
QWidget *widgetTitle; 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: private:
// 私有成员变量,用于控制显示时间和倒计时。 int closeSec; //总显示时间
int closeSec; // 总显示时间 int currentSec; //当前已显示时间
int currentSec; // 当前已显示时间 QString value; //当前值
QString value; // 当前输入值
private slots: private slots:
// 私有槽函数,用于初始化控件和窗体,以及倒计时检查。 void initControl(); //初始化控件
void initControl(); // 初始化控件 void initForm(); //初始化窗体
void initForm(); // 初始化窗体 void checkSec(); //校验倒计时
void checkSec(); // 校验倒计时
private slots: private slots:
// 私有槽函数,用于处理按钮点击事件。
void on_btnOk_clicked(); void on_btnOk_clicked();
void on_btnMenu_Close_clicked(); void on_btnMenu_Close_clicked();
public: public:
// 公有函数,用于获取输入框的值。 QString getValue()const;
QString getValue() const;
public Q_SLOTS: public Q_SLOTS:
// 公有槽函数,用于设置输入框参数和图标。
void setIconMain(QChar str, quint32 size = 9); void setIconMain(QChar str, quint32 size = 9);
void setParameter(const QString &title, int type = 0, int closeSec = 0, void setParameter(const QString &title, int type = 0, int closeSec = 0,
QString defaultValue = QString(), bool pwd = false); QString defaultValue = QString(), bool pwd = false);
}; };
// 图形字体处理类 //图形字体处理类
class IconHelper : public QObject class IconHelper : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
// 构造函数和单例模式,用于获取图形字体处理实例。
explicit IconHelper(QObject *parent = 0); explicit IconHelper(QObject *parent = 0);
static IconHelper *Instance() static IconHelper *Instance()
{ {
static QMutex mutex; static QMutex mutex;
if (!self) { if (!self) {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
if (!self) { if (!self) {
self = new IconHelper; self = new IconHelper;
} }
} }
return self; return self;
} }
// 公有函数,用于设置图标和获取图片。
void setIcon(QLabel *lab, QChar c, quint32 size = 9); void setIcon(QLabel *lab, QChar c, quint32 size = 9);
void setIcon(QAbstractButton *btn, QChar c, quint32 size = 9); void setIcon(QAbstractButton *btn, QChar c, quint32 size = 9);
QPixmap getPixmap(const QString &color, QChar c, quint32 size = 9, QPixmap getPixmap(const QString &color, QChar c, quint32 size = 9,
quint32 pixWidth = 10, quint32 pixHeight = 10); 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: protected:
// 事件过滤器。
bool eventFilter(QObject *watched, QEvent *event); bool eventFilter(QObject *watched, QEvent *event);
private: private:
static IconHelper *self; // 对象自身 static IconHelper *self; //对象自身
QFont iconFont; // 图形字体 QFont iconFont; //图形字体
QList<QToolButton *> btns; // 按钮队列 QList<QToolButton *> btns; //按钮队列
QList<QPixmap> pixNormal; // 正常图片队列 QList<QPixmap> pixNormal; //正常图片队列
QList<QPixmap> pixDark; // 深色图片队列 QList<QPixmap> pixDark; //加深图片队列
}; };
// 全局变量控制 //全局变量控制
class QUIConfig class QUIConfig
{ {
public: public:
// 全局图标 //全局图标
static QChar IconMain; // 标题栏左上角图标 static QChar IconMain; //标题栏左上角图标
static QChar IconMenu; // 下拉菜单图标 static QChar IconMenu; //下拉菜单图标
static QChar IconMin; // 最小化图标 static QChar IconMin; //最小化图标
static QChar IconMax; // 最大化图标 static QChar IconMax; //最大化图标
static QChar IconNormal; // 还原图标 static QChar IconNormal; //还原图标
static QChar IconClose; // 关闭图标 static QChar IconClose; //关闭图标
static QString FontName; // 全局字体名称 static QString FontName; //全局字体名称
static int FontSize; // 全局字体大小 static int FontSize; //全局字体大小
static QString ConfigFile; // 配置文件文件路径及名称 static QString ConfigFile; //配置文件文件路径及名称
// 样式表颜色值 //样式表颜色值
static QString TextColor; // 文字颜色 static QString TextColor; //文字颜色
static QString PanelColor; // 面板颜色 static QString PanelColor; //面板颜色
static QString BorderColor; // 边框颜色 static QString BorderColor; //边框颜色
static QString NormalColorStart;// 正常状态开始颜色 static QString NormalColorStart;//正常状态开始颜色
static QString NormalColorEnd; // 正常状态结束颜色 static QString NormalColorEnd; //正常状态结束颜色
static QString DarkColorStart; // 深色状态开始颜色 static QString DarkColorStart; //加深状态开始颜色
static QString DarkColorEnd; // 深色状态结束颜色 static QString DarkColorEnd; //加深状态结束颜色
static QString HighColor; // 高亮颜色 static QString HighColor; //高亮颜色
static void ReadConfig(); // 读取配置文件,在main函数最开始加载程序载入 static void ReadConfig(); //读取配置文件,在main函数最开始加载程序载入
static void WriteConfig(); // 写入配置文件,在更改配置文件程序关闭时调用 static void WriteConfig(); //写入配置文件,在更改配置文件程序关闭时调用
static void NewConfig(); // 以初始值新建配置文件 static void NewConfig(); //以初始值新建配置文件
static bool CheckConfig(); // 校验配置文件 static bool CheckConfig(); //校验配置文件
}; };
#endif // QUIWIDGET_H #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,6 +1,3 @@
Qt Meta-Object Compilermoc C++ `quiwidget.h` `QUIWidget``QUIMessageBox` `QUIInputBox` Qt
```cpp
/**************************************************************************** /****************************************************************************
** Meta object code from reading C++ file 'quiwidget.h' ** Meta object code from reading C++ file 'quiwidget.h'
** **
@ -9,24 +6,20 @@
** WARNING! All changes made in this file will be lost! ** WARNING! All changes made in this file will be lost!
*****************************************************************************/ *****************************************************************************/
#include "../quiwidget.h" // 包含自定义的quiwidget.h头文件 #include "../quiwidget.h"
#include <QtCore/qbytearray.h> // 包含QByteArray类 #include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h> // 包含QMetaType类 #include <QtCore/qmetatype.h>
// 确保quiwidget.h中包含了<QObject>,否则报错
#if !defined(Q_MOC_OUTPUT_REVISION) #if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'quiwidget.h' doesn't include <QObject>." #error "The header file 'quiwidget.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67 #elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.8.0." #error "This file was generated using the moc from 5.8.0. It"
#error "cannot be used with the include files from this version of Qt." #error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)" #error "(The moc has changed too much.)"
#endif #endif
QT_BEGIN_MOC_NAMESPACE // Qt 元对象命名空间开始 QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH // 保存当前警告状态,并禁用弃用警告 QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED // 禁用弃用警告 QT_WARNING_DISABLE_DEPRECATED
// qt_meta_stringdata_QUIWidget_t 结构体包含了 QUIWidget 类的所有字符串数据
struct qt_meta_stringdata_QUIWidget_t { struct qt_meta_stringdata_QUIWidget_t {
QByteArrayData data[49]; QByteArrayData data[49];
char stringdata0[575]; char stringdata0[575];
@ -36,80 +29,652 @@ struct qt_meta_stringdata_QUIWidget_t {
qptrdiff(offsetof(qt_meta_stringdata_QUIWidget_t, stringdata0) + ofs \ qptrdiff(offsetof(qt_meta_stringdata_QUIWidget_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \ - idx * sizeof(QByteArrayData)) \
) )
// 初始化 qt_meta_stringdata_QUIWidget_t 结构体
static const qt_meta_stringdata_QUIWidget_t qt_meta_stringdata_QUIWidget = { 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[] = { 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) 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 = { const QMetaObject QUIWidget::staticMetaObject = {
{ &QDialog::staticMetaObject, qt_meta_stringdata_QUIWidget.data, { &QDialog::staticMetaObject, qt_meta_stringdata_QUIWidget.data,
qt_meta_data_QUIWidget, qt_static_metacall, Q_NULLPTR, Q_NULLPTR} qt_meta_data_QUIWidget, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
}; };
// QUIWidget::metaObject() 函数返回类的元对象
const QMetaObject *QUIWidget::metaObject() const const QMetaObject *QUIWidget::metaObject() const
{ {
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
} }
// QUIWidget::qt_metacast() 函数用于元对象类型的转换
void *QUIWidget::qt_metacast(const char *_clname) 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) 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 1 是 QUIWidget 类的信号实现 // SIGNAL 0
void QUIWidget::changeStyle(const QString & _t1) 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() 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[] = {
// 以下是 QUIMessageBox 和 QUIInputBox 类的元对象代码,结构与 QUIWidget 类似 // content:
// ... 省略了 QUIMessageBox 和 QUIInputBox 的元对象代码 7, // revision
0, // classname
0, 0, // classinfo
9, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
QT_WARNING_POP // 恢复警告状态 // slots: name, argc, parameters, tag, flags
QT_END_MOC_NAMESPACE // Qt 元对象命名空间结束 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 */,
### 代码解释: // 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,
1. **** Qt `quiwidget.h` `<QObject>` 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;
}
2. ****`qt_meta_stringdata_QUIWidget_t` QUIWidget 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);
}
3. ****`qt_meta_data_QUIWidget` 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"
4. ****`qt_static_metacall` 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
5. ****`staticMetaObject` QUIWidget static const uint qt_meta_data_QUIInputBox[] = {
6. ****`metaObject()``qt_metacast()` `qt_metacall()` 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
7. ****`changeStyle` `closing` QUIWidget 使 `QMetaObject::activate` // 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 */,
8. **QUIMessageBox QUIInputBox ** QUIMessageBox QUIInputBox QUIWidget // 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,
Qt moc 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

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

@ -1,202 +0,0 @@
这个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中进行可视化编辑以避免手动编辑错误。

@ -1,6 +1 @@
1 1
1
1
1
1
1
Loading…
Cancel
Save