Qt日常备注(函数/接口实现)
1.判断QString是否为纯数字
2.查找自身最长重复子字符串
3.树形列表复选框操作
4.更改文件权限
5.判断系统64位
6.文件生成md5值
7.版本号比较(字符串比较)
//-----实现-----
1.判断QString是否为纯数字
- bool IsDigitString(QString strSource)
- {
- bool bDigit = false;
- if (strSource.isEmpty())
- {
- return bDigit;
- }
- QByteArray strByteArray = strSource.toLatin1();
- const char *chString = strByteArray.data();
- while (*chString && *chString>='' && *chString<='') chString++;
- if (*chString)
- {
- bDigit = false;
- }
- else
- {
- bDigit = true;
- }
- return bDigit;
- }
2.查找自身最长重复子字符串
- QString MaxSubString(QString inputString)
- {
- QString subString = "";
- int strLen = inputString.size();
- if (strLen <= )
- {
- return subString;
- }
- int maxSubStrLen = ;
- int tempLen = ;
- int subIndex = ;
- int i = ;
- int j = ;
- int k = ;
- while (i < strLen)
- {
- j = i+;
- while(j < strLen)
- {
- if (inputString.at(i) == inputString.at(j))
- {
- tempLen = ;
- for (k=; j+k<strLen && inputString.at(i+k)==inputString.at(j+k); k++)
- {
- tempLen++;
- }
- if (tempLen > maxSubStrLen)
- {
- subIndex = i;
- maxSubStrLen = tempLen;
- }
- j += tempLen;
- }
- else
- {
- j++;
- }
- }
- i++;
- }
- for (i=; i<maxSubStrLen; i++)
- {
- subString.append(inputString.at(subIndex+i));
- }
- return subString;
- }
3.树形列表复选框操作
- void CCheckBoxDialog::treeItemsChangeStol(QTreeWidgetItem *pCurrentItem, int)
- {
- if (m_itemsCount <= )//没有子节点,不存在选中操作
- {
- updateComboInfoStol();
- return;
- }
- if (Qt::Checked == pCurrentItem->checkState())
- {
- //QTreeWidgetItem *parentItem = pCurrentItem->parent();
- int childCount = pCurrentItem->childCount();
- if (childCount >)//父节点被选中
- {
- for (int i=; i<childCount; i++)
- {
- pCurrentItem->child(i)->setCheckState(, Qt::Checked);
- }
- }
- else //更新父节点复选框状态
- {
- updateParentItemStateStol(pCurrentItem);
- }
- }
- else if (Qt::Unchecked == pCurrentItem->checkState())
- {
- //QTreeWidgetItem *parentItem = pCurrentItem->parent();
- int childCount = pCurrentItem->childCount();
- if (childCount >)//父节点被选中
- {
- for (int i=; i<childCount; i++)
- {
- pCurrentItem->child(i)->setCheckState(, Qt::Unchecked);
- }
- }
- else //更新父节点复选框状态
- {
- updateParentItemStateStol(pCurrentItem);
- }
- }
- updateComboInfoStol();
- }
- void CCheckBoxDialog::updateParentItemStateStol(QTreeWidgetItem *pCurrentItem)
- {
- QTreeWidgetItem *parentItem = pCurrentItem->parent();
- if (parentItem == NULL)
- {
- return;
- }
- int selectedCount = ;//当前子节点选中个数
- int childCount = parentItem->childCount();
- for (int i=; i<childCount; i++)
- {
- QTreeWidgetItem *childItem = parentItem->child(i);
- if (Qt::Checked == childItem->checkState())
- {
- selectedCount++;
- }
- }
- if (selectedCount <= )
- {
- //未选中任何项
- parentItem->setCheckState(, Qt::Unchecked);
- }
- else if (selectedCount> && selectedCount<childCount)
- {
- //选中部分子项
- parentItem->setCheckState(, Qt::PartiallyChecked);
- }
- else if (selectedCount == childCount)
- {
- //选中所有子项
- parentItem->setCheckState(, Qt::Checked);
- }
- }
4.更改文件权限
- static void ChangeFilePermission( const QString &filePath )
- {
- #ifdef WIN32
- QString cmd("icacls.exe \"") ;
- cmd += filePath;
- cmd += "\" /grant Everyone:(F)";
- STARTUPINFOW si;
- PROCESS_INFORMATION pi;
- ZeroMemory(&si, sizeof(si));
- si.cb = sizeof(si);
- #ifndef _DEBUG
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_HIDE;
- #endif
- ZeroMemory(&pi, sizeof(pi));
- CreateProcessW (NULL, // No module name (use command line).
- (wchar_t*)cmd.utf16(), // Command line.
- NULL, // Process handle not inheritable.
- NULL, // Thread handle not inheritable.
- FALSE, // Set handle inheritance to FALSE.
- 0, // No creation flags.
- NULL, // Use parent's environment block.
- NULL, // Use parent's starting directory.
- &si, // Pointer to STARTUPINFO structure.
- &pi); // Pointer to PROCESS_INFORMATION structure.
- WaitForSingleObject(pi.hProcess, INFINITE);
- CloseHandle(pi.hProcess);
- CloseHandle(pi.hThread);
- #endif
- }
5.判断系统64位
- static bool IsWin64 (void)
- {
- SYSTEM_INFO si = {0};
- typedef void (WINAPI *LPFN_PGNSI)(LPSYSTEM_INFO);
- LPFN_PGNSI pGNSI = (LPFN_PGNSI)GetProcAddress(GetModuleHandleA(("kernel32.dll")),"GetNativeSystemInfo");
- if (pGNSI) pGNSI(&si);
- if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
- {
- return true;
- }
- return false;
- }
6.文件生成md5值
- static bool GetFileMd5Code(const QString strFilePath, QString &strMD5Code)
- {
- bool bRet = false;
- strMD5Code = "";
- if (!QFile::exists(strFilePath))
- {
- qDebug() << strFilePath << " don't exist!";
- return bRet;
- }
- QFile file(strFilePath);
- if (file.open(QIODevice::ReadOnly))
- {
- QCryptographicHash cryptographicHash(QCryptographicHash::Md5);
- cryptographicHash.addData(&file);
- strMD5Code = QString::fromLatin1(cryptographicHash.result().toHex());
- file.close();
- bRet = true;
- }
- qDebug() << "md5:" << strMD5Code;
- return bRet;
- }
- qDebug() << "md5:" << strMD5Code;
- return bRet;
- }
QByteArray块数据生成Md5
- QByteArray GetByteArrayMd5(const QByteArray &byteArrayData)
- {
- return QCryptographicHash::hash(byteArrayData, QCryptographicHash::Md5).toHex();
- }
7.版本号比较(字符串比较)
- int CompareVersion(QString strVer1, QString strVer2)
- {
- if ( !strVer1.compare( strVer2 ) )
- {
- return ;
- }
- QStringList list1 = strVer1.split( "." );
- QStringList list2 = strVer2.split( "." );
- int iTotal1 = list1.count();
- int iTotal2 = list2.count();
- int iTotal=iTotal1>iTotal2?iTotal2:iTotal1;
- int iValue1 = , iValue2 = ;
- bool ibOK1 = false, ibOK2 = false;
- for ( int iNum = ; iNum < iTotal; ++iNum )
- {
- iValue1 = list1[iNum].toInt( &ibOK1 );
- if (!ibOK1)
- {
- iValue1=;
- }
- iValue2 = list2[iNum].toInt( &ibOK2 );
- if (!ibOK2)
- {
- iValue2=;
- }
- if (iValue1==iValue2)
- {
- continue;
- }
- else if ( iValue1 < iValue2 )
- {
- return -;
- }
- else
- {
- return ;
- }
- }
- return iTotal1<iTotal2?-:;
- }
测试:
- CompareVersion("16.01.19", "16.01.19") //return 0;
- CompareVersion("16.01.19", "16.01.18") //return 1;
- CompareVersion("16.01.18", "16.01.19") //return -1;
Qt日常备注(函数/接口实现)的更多相关文章
- C语言的本质(15)——C语言的函数接口入门
C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...
- Lambda函数接口和方法构造器应用
函数式接口 什么是函数式接口? 在java中'有且仅有一个抽象方法的接口',就称为函数式接口. 可以通过Lambda表达式来创建该接口的对象.(若Lambda表达式抛出一个受检异常,那么该异常需要在目 ...
- Spring AOP在函数接口调用性能分析及其日志处理方面的应用
面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...
- IO端口和IO内存的区别及分别使用的函数接口
每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...
- C语言的本质(16)——函数接口的传入参数与传出参数
如果函数接口有指针参数,既可以把指针所指向的数据传给函数使用(称为传入参数),也可以由函数填充指针所指的内存空间,传回给调用者使用(称为传出参数),例如strcpy的函数原型为 char *strcp ...
- Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
Qt窗口中的一些小技术总结 //Qt主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv ...
- 开始Java8之旅(四) --四大函数接口
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
随机推荐
- Elasticsearch学习随笔(一)--原理理解与5.0核心插件部署过程
最近由于要涉及一些安全运维的工作,最近在研究Elasticsearch,为ELK做相关的准备.于是把自己学习的一些随笔分享给大家,进行学习,在部署常用插件的时候由于是5.0版本的Elasticsear ...
- Educational Codeforces Round 22.B 暴力
B. The Golden Age time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Linux 密钥验证
服务端配置puttygen 生成公钥,保存私钥复制公钥,写入服务端mkdir /root/.sshvi /root/.ssh/authorized_keys 生成文件,将公钥写入到文件中chmod 7 ...
- 使用Jenkins进行持续集成ionic3项目
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 网上大多数是关于.net web网站以及 ...
- Java IO在实际开发中的应用
IO是java绕不过去的槛,在开发中io无处不在, 正如同 世界上本没有路,java io写多了,也就知道了大体是什么意思,在读完thinking in java 感觉就更清晰了,结合具体的业务场景, ...
- .NetCore~C#6的一些新特性
回到目录 在进行.netCore平台后,由于它的版本在.net4.6,C#6之后,所以它的语法也有一些新的特性,主要表现在以下几个方面 只读属性初始化 static string Hello => ...
- Vulkan Tutorial 28 Depth buffering
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 到目前为止,我们所使用的几何图形为3D,但仍然完全扁平的. ...
- 剖析touch事件在View中的传递
话不多说,直奔主题,先来看一张图 版权申明:这是csdn上别人的图,我觉得有用,就拿过来了, 然后简单说明下: 总的来说,触摸事件是从最外层的ViewGroup,一级一级传递进来的 和这相关的每个Vi ...
- 使用ajax方法实现form表单的提交(附源码)
写在前面的话 在使用form表单的时候,一旦点击提交触发submit事件,一般会使得页面跳转,页面间的跳转等行为的控制权往往在后端,后端会控制页面的跳转及数据传递,但是在某些时候不希望页面跳转,或者说 ...
- PHP中json_encode与json_decode
一.json_encode() 对变量进行JSON编码, 语法: json_encode ( $value [, $options = 0 ] ) 注意:1.$value为要编码的值,且该函数只对UT ...