这段代码是一个Qt应用程序的实现文件,包含了`QUIWidget`、`QUIMessageBox`、`QUIInputBox`和`IconHelper`类的定义。以下是对代码中的关键部分的详细注释: ```cpp // 包含头文件 #include "quiwidget.h" // 定义获取桌面宽度和高度的静态方法 int QUIWidget::deskWidth() { return qApp->desktop()->availableGeometry().width(); } int QUIWidget::deskHeight() { return qApp->desktop()->availableGeometry().height(); } // 定义获取应用程序名称和路径的静态方法 QString QUIWidget::appName() { QString name = qApp->applicationFilePath(); QStringList list = name.split("/"); name = list.at(list.count() - 1).split(".").at(0); return name; } QString QUIWidget::appPath() { #ifdef __arm__ // Android平台的特定路径 return "/sdcard/Android/lys"; #else // 其他平台返回应用程序的路径 return qApp->applicationDirPath(); #endif } // 定义创建新目录的静态方法 void QUIWidget::newDir(const QString &dirName) { QString strDir = dirName; // 如果路径不是绝对路径,则添加应用程序的路径 if (!strDir.startsWith("/") && !strDir.contains(":/")) { strDir = QString("%1/%2").arg(QUIWidget::appPath()).arg(strDir); } QDir dir(strDir); // 如果目录不存在,则创建目录 if (!dir.exists()) { dir.mkpath(strDir); } } // 定义写入日志信息的静态方法 void QUIWidget::writeInfo(const QString &info, const QString &filePath) { QString fileName = QString("%1/%2/%3_runinfo_%4.txt").arg(QUIWidget::appPath()) .arg(filePath).arg(QUIWidget::appName()).arg(QDate::currentDate().year()); QFile file(fileName); file.open(QIODevice::WriteOnly | QIODevice::Append | QFile::Text); QTextStream stream(&file); stream << DATETIME << info << NEWLINE; file.close(); } // 定义设置全局样式的静态方法 void QUIWidget::setStyle(QUIWidget::Style style) { QString qssFile = ":/qss/blue.css"; // 根据样式选择对应的qss文件 switch (style) { // ... 省略了其他样式的设置 default: break; } QFile file(qssFile); // 读取qss文件并应用样式 if (file.open(QFile::ReadOnly)) { QString qss = QLatin1String(file.readAll()); QString paletteColor = qss.mid(20, 7); qApp->setPalette(QPalette(QColor(paletteColor))); qApp->setStyleSheet(qss); file.close(); } } // 定义设置窗体居中显示的静态方法 void QUIWidget::setFormInCenter(QWidget *frm) { int frmX = frm->width(); int frmY = frm->height(); QDesktopWidget w; int deskWidth = w.availableGeometry().width(); int deskHeight = w.availableGeometry().height(); QPoint movePoint(deskWidth / 2 - frmX / 2, deskHeight / 2 - frmY / 2); frm->move(movePoint); } // 定义设置翻译文件的静态方法 void QUIWidget::setTranslator(const QString &qmFile) { QTranslator *translator = new QTranslator(qApp); translator->load(qmFile); qApp->installTranslator(translator); } // 定义设置编码的静态方法 void QUIWidget::setCode() { #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) #if _MSC_VER QTextCodec *codec = QTextCodec::codecForName("gbk"); #else QTextCodec *codec = QTextCodec::codecForName("utf-8"); #endif QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForTr(codec); #else QTextCodec *codec = QTextCodec::codecForName("utf-8"); QTextCodec::setCodecForLocale(codec); #endif } // 定义设置延时的静态方法 void QUIWidget::sleep(int sec) { QTime dieTime = QTime::currentTime().addMSecs(sec); while (QTime::currentTime() < dieTime) { QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } } // 定义设置系统日期和时间的静态方法 void QUIWidget::setSystemDateTime(const QString &year, const QString &month, const QString &day, const QString &hour, const QString &min, const QString &sec) { #ifdef Q_OS_WIN // Windows平台的设置方法 QProcess p(0); p.start("cmd"); p.waitForStarted(); p.write(QString("date %1-%2-%3\n").arg(year).arg(month).arg(day).toLatin1()); p.closeWriteChannel(); p.waitForFinished(1000); p.close(); p.start("cmd"); p.waitForStarted(); p.write(QString("time %1:%2:%3.00\n").arg(hour).arg(min).arg(sec).toLatin1()); p.closeWriteChannel(); p.waitForFinished(1000); p.close(); #else // Linux平台的设置方法 QString cmd = QString("date %1%2%3%4%5.%6").arg(month).arg(day).arg(hour).arg(min).arg(year).arg(sec); system(cmd.toLatin1()); system("hwclock -w"); #endif } // 定义设置开机自启动的静态方法 void QUIWidget::runWithSystem(const QString &strName, const QString &strPath, bool autoRun) { #ifdef Q_OS_WIN // Windows平台的设置方法 QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat); if (autoRun) { reg.setValue(strName, strPath); } else { reg.setValue(strName, ""); } #endif } // 定义判断IP地址是否合法的静态方法 bool QUIWidget::isIP(const QString &ip) { QRegExp RegExp("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)"); return RegExp.exactMatch(ip); } // 定义判断MAC地址是否合法的静态方法 bool QUIWidget::isMac(const QString &mac) { QRegExp RegExp("^[A-F0-9]{2}(-[A-F0-9]{2}){5}$"); return RegExp.exactMatch(mac); } // 定义判断电话号码是否合法的静态方法 bool QUIWidget::isTel(const QString &tel) { if (tel.length() != 11) { return false; } if (!tel.startsWith("13") && !tel.startsWith("14") && !tel.startsWith("15") && !tel.startsWith("18")) { return false; } return true; } // 定义判断邮箱地址是否合法的静态方法 bool QUIWidget::isEmail(const QString &email) { if (!email.contains("@") || !email.contains(".com")) { return false; } return true; } // 定义字符串转换为十进制数的静态方法 int QUIWidget::strHexToDecimal(const QString &strHex) { bool ok; return strHex.toInt(&ok, 16); } // 定义字符串转换为十进制数的静态方法 int QUIWidget::strDecimalToDecimal(const QString &strDecimal) { bool ok; return strDecimal.toInt(&ok, 10); } // 定义字符串转换为二进制数的静态方法 int QUIWidget::strBinToDecimal(const QString &strBin) { bool ok; return strBin.toInt(&ok, 2); } // 定义十六进制字符串转换为二进制字符串的静态方法 QString QUIWidget::strHexToStrBin(const QString &strHex) { uchar decimal = strHexToDecimal(strHex); QString bin = QString::number(decimal, 2); uchar len = bin.length(); if (len < 8) { for (int i = 0; i < 8 - len; i++) { bin = "0" + bin; } } return bin; } // 定义十进制数转换为二进制字符串的静态方法(一个字节) QString QUIWidget::decimalToStrBin1(int decimal) { QString bin = QString::number(decimal, 2); uchar len = bin.length(); if (len <= 8 ) { for (int i = 0; i < 8 - len; i++) { bin = "0" + bin; } } return bin; } // 定义十进制数转换为二进制字符串的静态方法(两个字节) QString QUIWidget::decimalToStrBin2(int decimal) { QString bin = QString::number(decimal, 2); uchar len = bin.length(); if (len <= 16) { for (int i = 0; i < 16 - len; i++) { bin = "0" + bin; } } return bin; } // 定义十进制数转换为十六进制字符串的静态方法 QString QUIWidget::decimalToStrHex(int decimal) { QString temp = QString::number(decimal, 16); if (temp.length() == 1) { temp = "0" + temp; } return temp; } // 定义整数转换为字节数组的静态方法 QByteArray QUIWidget::intToByte(int i) { QByteArray result; result.resize(4); result[3] = (uchar)(0x000000ff & i); result[2] = (uchar)((0x0000ff00 & i) >> 8); result[1] = (uchar)((0x00ff0000 & i) >> 16); result[0] = (uchar)((0xff000000 & i) >> 24); return result; } // 定义字节数组转换为整数的静态方法 int QUIWidget::byteToInt(const QByteArray &data) { int i = data.at(3) & 0x000000FF; i |= ((data.at(2) << 8) & 0x0000FF00); i |= ((data.at(1) << 16) & 0x00FF0000); i |= ((data.at(0) << 24) & 0xFF000000); return i; } // 定义短整数转换为字节数组的静态方法 QByteArray QUIWidget::ushortToByte(ushort i) { QByteArray result; result.resize(2); result[1] = (uchar)(0x000000ff & i); result[0] = (uchar)((0x0000ff00 & i) >> 8); return result; } // 定义字节数组转换为短整数的静态方法 int QUIWidget::byteToUShort(const QByteArray &data) { int i = data.at(1) & 0x000000FF; i |= ((data.at(0) << 8) & 0x0000FF00); return i; } // 定义异或加密解密的静态方法 QString QUIWidget::getXorEncryptDecrypt(const QString &str, char key) { QByteArray data = str.toLatin1(); int size = data.size(); for (int i = 0; i < size; i++) { data[i] = data.at(i) ^ key; } return QLatin1String(data); } // 定义异或校验的静态方法 uchar QUIWidget::getOrCode(const QByteArray &data) { int len = data.length(); uchar result = 0; for (int i = 0; i < len; i++) { result ^= data.at(i); } return result; } // 定义计算校验码的静态方法 uchar QUIWidget::getCheckCode(const QByteArray &data) { int len = data.length(); uchar temp = 0; for (uchar i = 0; i < len; i++) { temp += data.at(i); } return temp % 256; } // 定义字节数组转换为ASCII字符串的静态方法 QString QUIWidget::byteArrayToAsciiStr(const QByteArray &data) { QString temp; int len = data.size(); for (int i = 0; i < len; i++) { // 0x20为空格,空格以下都是不可见字符 char b = data.at(i); if (0x00 == b) { temp += QString("\\NUL"); } else if (0x01 == b) { temp += QString("\\SOH"); } else if (0x02 == b) { temp += QString("\\STX"); } else if (0x03 == b) { temp += QString("\\ETX"); } else if (0x04 == b) { temp += QString("\\EOT"); } else if (0x05 == b) { temp += QString("\\ENQ"); } else if (0x06 == b) { temp += QString("\\ACK"); } else if (0x07 == b) { temp += QString("\\BEL"); } else if (0x08 == b) { temp += QString("\\BS"); } else if (0x09 == b) { temp += QString("\\HT"); } else if (0x0A == b) { temp += QString("\\LF"); } else if (0x0B == b) { temp += QString("\\VT"); } else if (0x0C == b) { temp += QString("\\FF"); } else if (0x0D == b) { temp += QString("\\CR"); } else if (0x0E == b) { temp += QString("\\SO"); } else if (0x0F == b) { temp += QString("\\SI"); } else if (0x10 == b) { temp += QString("\\DLE"); } else if (0x11 == b) { temp += QString("\\DC1"); } else if (0x12 == b) { temp += QString("\\DC2"); } else if (0x13 == b) { temp += QString("\\DC3"); } else if (0x14 == b) { temp += QString("\\DC4"); } else if (0x15 == b) { temp += QString("\\NAK"); } else if (0x16 == b) { temp += QString("\\SYN"); } else if (0x17 == b) { temp += QString("\\ETB"); } else if (0x18 == b) { temp += QString("\\CAN"); } else if (0x19 == b) { temp += QString("\\EM"); } else if (0x1A == b) { temp += QString("\\SUB"); } else if (0x1B == b) { temp += QString("\\ESC"); } else if (0x1C == b) { temp += QString("\\FS"); } else if (0x1D == b) { temp += QString("\\GS"); } else if (0x1E == b) { temp += QString("\\RS"); } else if (0x1F == b) { temp += QString("\\US"); } else if (0x7F == b) { temp += QString("\\x7F"); } else if (0x5C == b) { temp += QString("\\x5C"); } else if (0x20 >= b) { temp += QString("\\x%1").arg(decimalToStrHex((quint8)b)); } else { temp += QString("%1").arg(b); } } return temp.trimmed(); } // 定义十六进制字符串转换为字节数组的静态方法 QByteArray QUIWidget::hexStrToByteArray(const QString &str) { QByteArray senddata; int hexdata, lowhexdata; int hexdatalen = 0; int len = str.length(); senddata.resize(len / 2); char lstr, hstr; for (int i = 0; i < len;) { hstr = str.at(i).toLatin1(); if (hstr == ' ') { i++; continue; } i++; if (i >= len) { break; } lstr = str.at(i).toLatin1(); hexdata = convertHexChar(hstr); lowhexdata = convertHexChar(lstr); if ((hexdata == 16) || (lowhexdata == 16)) { break; } else { hexdata = hexdata * 16 + lowhexdata; } i++; senddata[hexdatalen] = (char)hexdata; hexdatalen++; } senddata.resize(hexdatalen); return senddata; } // 定义转换十六进制字符为十进制值的静态方法 char QUIWidget::convertHexChar(char ch) { if ((ch >= '0') && (ch <= '9')) { return ch - 0x30; } else if ((ch >= 'A') && (ch <= 'F')) { return ch - 'A' + 10; } else if ((ch >= 'a') &&