博主编写Qt应用程序这么多年,从终端调试软件、界面应用软件、音视频编解码软件、截屏录屏软件、推流拉流软件、OSG相关软件、输入法,积累一些方便使用的函数,现在只将部分公开出来。
头文件:quiutils.h
#ifndef QUIUTILS_H
#define QUIUTILS_H
#include
#include
namespace QUIUtils {
/**
* @brief deskWidth 获取桌面宽度
* @return
*/
int deskWidth();
/**
* @brief deskHeight 获取桌面高度
* @return
*/
int deskHeight();
/**
* @brief appName 程序本身文件名称
* @return
*/
QString appName();
/**
* @brief appPath 程序当前所在路径
* @return
*/
QString appPath();
/**
* @brief initRand 初始化随机数种子
*/
void initRand();
/**
* @brief newDir 新建目录
* @param dirName
*/
bool newDir(const QString &dirName);
/**
* @brief removeDir 删除目录及目录下文件
* @param dirName
* @return
*/
bool removeDir(const QString &dirName);
/**
* @brief removeFile 删除文件
* @param dirName
* @return
*/
bool removeFile(const QString &dirName);
/**
* @brief copyFile 拷贝文件
* @param fromFile
* @param toFile
* @return
*/
bool copyFile(QString fromFile, QString toFile);
/**
* @brief setBackground 设置背景色
*/
void setBackground(QWidget* obj,const QString &srcfile);
/**
* @brief setCodec 设置系统编码格式,默认utf-8
* @param code
*/
void setCodec(const char* codec = "utf-8");
/**
* @brief msleep 休眠msec毫秒
* @param sec
*/
void msleep(const int msec);
/**
* @brief delay_ms 休眠Time秒
* @param sec
*/
void delay_ms(int Time, bool IsThread);
/**
* @brief checkIpValid 检测IP是否正确
* @param ip
* @return bool
*/
bool checkIpValid(const QString &ip);
/**
* @brief hexToQString
* @param pHex
* @param len
* @return
*/
QString hexToQString(unsigned char *pHex, int len);
/**
* @brief setStyle 静态加载样式
* @param style
*/
void setStyle(QWidget* pObj,const QString &style);
/**
* @brief setTranslator 设置翻译文件
* @param qmFile
*/
void setTranslator(const QString &qmFile);
/**
* @brief setSystemTime 设置系统时间
* @param year
* @param month
* @param day
* @param hour
* @param min
* @param sec
*/
void setSystemTime(QString year, QString month,
QString day, QString hour,
QString min, QString sec);
/**
* @brief byteArrayToHexStr QByteArray转换成hex类型Qstring
* @param data
* @return
*/
QString byteArrayToHexStr(QByteArray data);
/**
* @brief isEnglish 判断字符串是否为纯字母
* @param str
* @return
*/
bool isEnglish(QString str);
/**
* @brief isNumber 判断字符串是否为纯数字
* @param str
* @return
*/
bool isNumber(QString str);
/**
* @brief readCSVFile 读取CSV文件数据
* @param fileName
*/
QList readCSVFile(const QString fileName);
}
#endif // QUIUTILS_H
源文件:quiutils.cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef Q_OS_UNIX
#include
#include
#include
#else
#include
#endif
#include "quiutils.h"
/**
* @brief deskWidth 获取桌面宽度
* @return
*/
int QUIUtils::deskWidth()
{
static int width = 0;
if (width == 0)
{
QDesktopWidget desktop;
width = desktop.width();
}
return width;
}
/**
* @brief deskHeight 获取桌面高度
* @return
*/
int QUIUtils::deskHeight()
{
static int height = 0;
if (height == 0)
{
QDesktopWidget desktop;
height = desktop.height();
}
return height;
}
/**
* @brief appName 程序本身文件名称
* @return
*/
QString QUIUtils::appName()
{
return qApp->applicationName();
}
/**
* @brief appPath 程序当前所在路径
* @return
*/
QString QUIUtils::appPath()
{
return qApp->applicationDirPath();
}
/**
* @brief initRand 初始化随机数种子
*/
void QUIUtils::initRand()
{
QTime t = QTime::currentTime();
qsrand(t.msec() + t.second() * 1000);
}
/**
* @brief newDir 新建目录
* @param dirName
*/
bool QUIUtils::newDir(const QString &dirName)
{
bool bRet = false;
QString strDir = dirName;
if (!strDir.startsWith("/") && !strDir.contains(":/"))
{
strDir = QString("%1/%2").arg(QUIUtils::appPath()).arg(strDir);
}
QDir dir(strDir);
if (!dir.exists())
{
bRet = dir.mkpath(strDir);
}
else
{
bRet = true;
}
return bRet;
}
/**
* @brief removeDir 删除目录及目录下文件
* @param dirName
* @return
*/
bool QUIUtils::removeDir(const QString &dirName)
{
if(dirName.isEmpty())
{
return true;
}
QDir dir(dirName);
foreach(QFileInfo mfi, dir.entryInfoList())
{
if(!mfi.isFile())
{
continue;
}
QFile file(mfi.absoluteFilePath());
file.remove();
file.close();
}
dir.rmdir(dirName);
return true;
}
/**
* @brief removeFile 删除文件
* @param dirName
* @return
*/
bool QUIUtils::removeFile(const QString &dirName)
{
QFile file(dirName);
if(file.exists())
{
file.remove();
}
return true;
}
/**
* @brief setBackground 设置背景色
* @param pixmap
*/
void QUIUtils::setBackground(QWidget* obj, const QString &pixmap)
{
// 增加背景色
QPalette mPalette;
QPixmap mPixmap(pixmap);
mPalette.setBrush(QPalette::Window, QBrush(mPixmap));
obj->setPalette(mPalette);
return;
}
/**
* @brief setCodec 设置系统编码格式,默认utf-8
* @param codec
*/
void QUIUtils::setCodec(const char* codec)
{
QTextCodec *pcodec = QTextCodec::codecForName(codec);
QTextCodec::setCodecForLocale(pcodec);
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
QTextCodec::setCodecForCStrings(pcodec);
QTextCodec::setCodecForTr(pcodec);
#endif
return;
}
/**
* @brief sleep 休眠sec毫秒
* @param sec
*/
void QUIUtils::msleep(const int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < dieTime)
{
QCoreApplication::processEvents(QEventLoop::AllEvents, 10);
#ifdef Q_OS_UNIX
struct timeval timeout ;
timeout.tv_sec = 0;
timeout.tv_usec = 500;
if(select(1, NULL, NULL, NULL, &timeout) == -1)
{
struct timespec tv;
tv.tv_sec = 0;
tv.tv_nsec = 500 * 1000;
nanosleep(&tv, NULL);
}
#else
Sleep(100);
#endif
}
return;
}
void QUIUtils::delay_ms(int Time, bool IsThread)
{
if(Time < 0) return;
QElapsedTimer tmr;
tmr.start();
while(true)
{
if(IsThread)
{
QCoreApplication::processEvents();
}
else
{
#ifdef Q_OS_UNIX
msleep(1);
#else
Sleep(1);
#endif
}
if (tmr.elapsed() >= Time)
{
break;
}
}
}
/**
* @brief checkIpValid 检测IP是否正确
* @param ip
* @return bool
*/
bool QUIUtils::checkIpValid(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);
}
/**
* @brief hexToQString
* @param pHex
* @param len
* @return
*/
QString QUIUtils::hexToQString(unsigned char *pHex, int len)
{
int index = 0;
QString mstr = "";
if(!pHex)
return "";
for(index = 0; index < len; index ++)
{
mstr = mstr + QString::number(pHex[index], 16) + " ";
}
return mstr;
}
/**
* @brief setStyle 静态加载样式
* @param style
*/
void QUIUtils::setStyle(QWidget* pObj, const QString &style)
{
if(!pObj || style.isEmpty())
{
return;
}
QFile qss(style);
qss.open(QFile::ReadOnly);
pObj->setStyleSheet(qss.readAll());
qss.close();
return;
}
/**
* @brief setTranslator 设置翻译文件
* @param qmFile
*/
void QUIUtils::setTranslator(const QString &qmFile)
{
QTranslator *trans = new QTranslator(qApp);
trans->load(qmFile);
qApp->installTranslator(trans);
return;
}
/**
* @brief setSystemTime 设置系统时间
* @param year
* @param month
* @param day
* @param hour
* @param min
* @param sec
*/
void QUIUtils::setSystemTime(QString year, QString month,
QString day, QString hour,
QString min, QString sec)
{
#ifdef Q_OS_WIN
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
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
}
/**
* @brief byteArrayToHexStr QByteArray转换成hex类型Qstring
* @param data
* @return
*/
QString QUIUtils::byteArrayToHexStr(QByteArray data)
{
(void)data;
QString temp = "";
QString hex = data.toHex();
for (int i = 0; i < hex.length(); i = i + 2)
{
temp += hex.mid(i, 2) + " ";
}
return temp.trimmed().toUpper();
}
/**
* @brief isEnglish 判断字符串是否为纯字母
* @param str
* @return
*/
bool QUIUtils::isEnglish(QString str)
{
if(str.isEmpty())
{
return false;
}
QByteArray ba = str.toLatin1();
const char *pch = ba.data();
bool bRet = true;
while(*pch)
{
if((*pch>='A' && *pch<='Z') || (*pch>='a' && *pch<='z'))
{
}
else
{
bRet = false;
break;
}
pch++;
}
return bRet;
}
/**
* @brief isNumber 判断字符串是否为纯数字
* @param str
* @return
*/
bool QUIUtils::isNumber(QString str)
{
QByteArray ba = str.toLatin1();
const char *s = ba.data();
while(*s && *s>='0' && *s<='9')
{
s++;
}
if(*s)
{
return false;
}
return true;
}
/**
* @brief readCSVFile 读取CSV文件数据
* @param fileName
*/
QList QUIUtils::readCSVFile(const QString fileName)
{
QDir dir = QDir::current();
QFile file(dir.filePath(fileName));
QList data;
QStringList item;
QString line ;
data.clear();
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return data;
}
QTextStream stream(&file);
while(!stream.atEnd())
{
line = stream.readLine();
line = line.trimmed();
if(line.isEmpty())
{
break;
}
//将读取的每一行用,分割
item = line.split(',');
data.append(item);
}
file.close();
return data;
}