深入Qt--封装Qt通用函数

深入Qt–封装Qt通用函数

博主编写Qt应用程序这么多年,从终端调试软件、界面应用软件、音视频编解码软件、截屏录屏软件、推流拉流软件、OSG相关软件、输入法,积累一些方便使用的函数,现在只将部分公开出来。

头文件:quiutils.h

#ifndef QUIUTILS_H
#define QUIUTILS_H

#include <QObject>
#include <QApplication>
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<QStringList> readCSVFile(const QString fileName);
}

#endif // QUIUTILS_H

源文件:quiutils.cpp

#include <qlocale.h>
#include <QPalette>
#include <QPixmap>
#include <QBrush>
#include <QWidget>
#include <QTime>
#include <QCoreApplication>
#include <QDesktopWidget>
#include <QDir>
#include <QTextCodec>
#include <QRegExp>
#include <QProcess>
#include <QTranslator>
#include <stdio.h>
#include <stdlib.h>
#include <QElapsedTimer>
#include <QPixmap>
#include <QPainter>
#include <QTextStream>

#ifdef Q_OS_UNIX
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#else
#include <windows.h>
#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<QStringList> QUIUtils::readCSVFile(const QString fileName)
{
    QDir dir = QDir::current();
    QFile file(dir.filePath(fileName));
    QList<QStringList> 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;
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值