欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

Qt工具类,java加密解密工具类

来源: 开发者 投稿于  被查看 9572 次 评论:101

Qt工具类,java加密解密工具类


1  字符串类

1.1 操作字符串

    字符串有如下几个操作符。  (1)QString提供了一个二元的“+”操作符用于组合两个字符串,并提供了一个“+=”操作符用于将一个字符串追加到另一个字符串的末尾,例如:     QString str1 = "Welcome "; str1=str1+"to you! ";        //str1=" Welcome to you! "     QString str2 = "Hello, "; str2+="World! ";                    //str2="Hello,World! "   (2)QString::append()函数具有与“+=”操作符同样的功能,实现在一个字符串的末尾追加另一个字符串,例如:     QString str1 = "Welcome ";     QString str2 = "to ";       str1.append(str2);         //str1=" Welcome to"     str1.append("you! ");    //str1="Welcome to you! " (3)组合字符串的另一个函数是QString::sprintf(),此函数支持的格式定义符和C++库中的函数sprintf()定义的一样。例如:      QString str;      str.sprintf("%s"," Welcome ");               //str="Welcome "      str.sprintf("%s"," to you! ");                   //str="to you! "      str.sprintf("%s %s"," Welcome ", "to you! ");   //str=" Welcome to you! "  (4)Qt还提供了另一种方便的字符串组合方式,使用QString::arg()函数,此函数的重载可以处理很多的数据类型。此外,一些重载具有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。通常,相对于函数QString::sprintf(),函数QString::arg()是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%n"参数的顺序。例如:     QString str;     str=QString("%1 was born in %2.").arg("John").arg(1982);            //str="John was born in 1982." (5)QString也提供了一些其他组合字符串的方法,包括如下几种。     ① insert()函数:在原字符串特定的位置插入另一个字符串;     ② prepend()函数:在原字符串的开头插入另一个字符串;     ③ replace()函数:用指定的字符串代替原字符串中的某些字符。 (6)很多时候去掉一个字符串两端的空白(空白字符包括回车字符“\n”、换行字符“\r”、制表符“\t”和空格字符“ ”等)非常有用,如获取用户输入的账号时。      ① QString::trimmed()函数:移除字符串两端的空白字符;      ② QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。      例如:      QString str="  Welcome \t to \n you!   ";      str=str.trimmed();                  //str=" Welcome \t to \n you! " 

1.2 查询字符串数据

(1)函数QString::startsWith()判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下,是大小写敏感的),例如:      QString str="Welcome to you! ";      str.startsWith("Welcome",Qt::CaseSensitive);   //返回true;     str.startsWith("you",Qt::CaseSensitive);            //返回false; (2)函数QString::endsWith()类似于QString::startsWith(),此函数判断一个字符串是否以某个字符串结尾。  (3)函数QString::contains()判断一个指定的字符串是否出现过,例如:     QString str=" Welcome to you! ";      str.contains("Welcome",Qt::CaseSensitive);      //返回true (4)比较两个字符串也是经常使用的功能,QString提供了多种比较手段。     ① operator<(const QString&):比较一个字符串是否小于另一个字符串,如果是,则返回true;     ② operator<=(const QString&):比较一个字符串是否小于等于另一个字符串,如果是,则返回true;     ③ operator==(const QString&):比较两个字符串是否相等,如果相等,则返回true;     ④ operator>=(const QString&):比较一个字符串是否大于等于另一个字符串,如果是,则返回true;     ⑤ localeAwareCompare(const QString&,const QString&):静态函数,比较前后两个字符串,如果小于则返回负整数值;如果等于则返回0;如果大于则返回正整数值。;     ⑥ compare(const QString&,const QString&,Qt::CaseSensitivity):该函数可以指定是否进行大小写的比较,而大小写的比较是完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare()函数。

1.3 字符串的转换

(1)QString::toInt()函数将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong()等。下面举个例子说明其用法:     QString str="125";     bool ok;     int hex=str.toInt(&ok,16);       //ok=true,hex=293     int dec=str.toInt(&ok,10);       //ok=true,dec=125 (2)QString提供的字符编码集的转换函数将会返回一个const char*类型版本的QByteArray,即构造函数QByteArray(const char*)构造的QByteArray对象。QByteArray类具有一个字节数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“\0”结尾的8位的字符串。在Qt中,使用QByteArray比使用const char*更方便,且QByteArray也支持隐式共享。转换函数有以下几种。     ① toAscii():返回一个ASCII编码的8位字符串。;     ② toLatin1():返回一个Latin-1(ISO8859-1)编码的8位字符串;     ③ toUtf8():返回一个UTF-8编码的8位字符串(UTF-8是ASCII码的超级,它支持整个Unicode字符集);     ④ toLocal8Bit():返回一个系统本地(locale)编码的8位字符串。     下面举例说明其用法:     QString str=" Welcome to you! ";     QByteArray ba=str.toAscii();     qDebug()<<ba;     ba.append("Hello,World! ");     qDebug()<<ba.data();     一个NULL字符串就是使用QString的默认构造函数或者使用“(const char*)0”作为参数的构造函数创建的QString字符串对象;而一个空字符串是一个大小为0的字符串。一个NULL字符串一定是一个空字符串,而一个空字符串未必是一个NULL字符串。例如:     QString().isNull();          //结果为true     QString().isEmpty();      //结果为true     QString("").isNull();      //结果为false     QString("").isEmpty();   //结果为true

2 容器类

2.1 QList类、QLinkedList类和QVector类

2.1.1 QList类

    QList<T>是迄今为止最常用的容器类,它存储给定数据类型T的一列数值。     QList不仅提供了可以在列表进行追加的QList::append()和Qlist::prepend()函数,还提供了在列表中间完成插入操作的函数QList::insert()。      QList<T>维护了一个指针数组,该数组存储的指针指向QList<T>存储的列表项的内容。     对于不同的数据类型,QList<T>采取不同的存储策略,存储策略有以下几种。  (1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>会将数值直接存储在它的数组中; (2)如果QList<T>存储对象的指针,则该指针指向实际存储的对象。     下面举一个例子:     #include <QDebug> int main(int argc,char *argv[])     {         QList<QString> list;              {                  QString str("This is a test string");                  list<<str;              }          qDebug()<<list[0]<< "How are you! ";          return 0;       }

2.1.2 QLinkedList类

    QLinkedList<T>是一个链式列表,它以非连续的内存块保存数据。     QLinkedList<T>不能使用下标,只能使用迭代器访问它的数据项。

2.1.3 QVector类 

    QVector<T>在相邻的内存中存储给定数据类型T的一组数值。      QVector<T>既可以使用下标访问数据项,也可以使用迭代器访问数据项。 

2.1.4 Java风格迭代器遍历容器 

    Java风格的迭代器是Qt 4新加入的一个功能。      对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型,即只读访问和读写访问,其分类见下表。     

2.1.5 STL风格迭代器遍历容器

    对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问;另一种提供读写访问。STL风格迭代器的两种分类见下表。     

2.2 QMap类和QHash类

    QMap类和QHash类具有非常类似的功能,它们的差别仅在于:     ①QHash具有比QMap更快的查找速度;     ② QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据;     ③ QHash的键类型Key必须提供operator==()和一个全局的qHash(Key)函数,而QMap的键类型Key必须提供operator<()函数。     二者的时间复杂度比较见下表。     

2.2.1 QMap类

    QMap<Key,T>提供了一个从类型为Key的键到类型为T的值的映射。

2.2.2 QHash类

    QHash<Key,T>具有与QMap几乎完全相同的API。     QHash维护着一张哈希表(Hash Table),哈希表的大小与QHash的数据项的数目相适应。

2.2.3 Java风格迭代器遍历容器

    对于每一个容器类,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问;另一种提供读写访问。其分类见下表。          下面的例子完成了在QMap中的插入、遍历和修改。     #include <QDebug>     int main(int argc,char *argv[])     {         QMap<QString,QString> map;         map.insert("beijing","111");         map.insert("shanghai","021");         map.insert("nanjing","025");         QMapIterator<QString,QString> i(map);         for( ; i.hasNext( ) ; )         {              qDebug()<<"  "<<i.key()<<"  "<<i.next().value();         }         QMutableMapIterator<QString,QString> mi(map);         if(mi.findNext("111"))         {             mi.setValue("010");         }        QMapIterator<QString,QString> modi(map);         qDebug()<<"  ";         for( ; modi.hasNext() ; )        {              qDebug()<<" "<<modi.key()<<"  "<<modi.next().value();         }          return 0;     }

2.2.4 STL风格迭代器遍历容器

    对于每一个容器类,Qt都提供了两种类型的STL风格迭代器数据类型:一种提供只读访问;另一种提供读写访问。其分类见下表。          下面的程序功能与使用Java风格迭代器的例子基本相同。不同的是,这里通过查找键来实现值的修改。     #include <QDebug>     int main(int argc,char *argv[])     {         QMap<QString,QString> map;         map.insert("beijing","111");         map.insert("shanghai","021");         map.insert("jinan","0531");         QMap<QString,QString>::const_iterator i;         for(i = map.constBegin(); i != map.constEnd() ; ++i )         {              qDebug()<<"  "<<i.key()<<"  "<<i.value();         }         QMap<QString,QString>::iterator mi;         mi=map.find("beijing");         if(mi != map.end())         {              mi.value()="010";         }         QMap<QString,QString>::const_iterator modi;         qDebug()<<"  ";         for(modi = map.constBegin() ; modi != map.constEnd() ; ++modi )         {              qDebug()<<"  "<<modi.key()<<"  "<<modi.value();         }         return 0;     }

3 QVariant类

    QVariant类类似于C++的联合(union)数据类型,它不仅能够保存许多Qt类型的值,包括QColor、QBrush、QFont、QPen、QRect、QString和QSize等,也能够存放Qt的容器类型的值。Qt的很多功能都是建立在QVariant基础上的,如Qt的对象属性及数据库功能等。

4 算法及正则表达式

4.1 Qt5常用算法

    Qt的<QtAlgorithms>和<QtGlobal>模块提供了一些算法和函数,下面简单介绍几个常用算法的用法。     #include <QDebug>     int main(int argc,char *argv[])     {         double a=-19.3, b=9.7;          double c=qAbs(a);             //c=19.3          double max=qMax(b,c);    //max=c=19.3
         int bn=qRound(b);            //bn=10          int cn=qRound(c);             //cn=19
         qDebug()<<"a="<<a;          qDebug()<<"b="<<b;          qDebug()<<"c=qAbs(a)= "<<c;          qDebug()<<"qMax(b,c)= "<<max;          qDebug()<<"bn=qRound(b)= "<<bn;          qDebug()<<"cn=qRound(c)= "<<cn;
         qSwap(bn,cn);          qDebug()<<"qSwap(bn,cn):"<<"bn="<<bn<<" cn="<<cn;                    return 0;     }

4.2 基本的正则表达式

    正则表达式由表达式(expressions)、量词(quantifiers)和断言(assertions)组成。 (1)最简单的表达式是一个字符。要表示字符集的表达式可以使用如“[AEIOU]”表示匹配所有的大写元音字母;使用“[^AEIOU]”则表示匹配所有非元音字母,即辅音字母;连续的字符集可以使用表达式如“[a-z]”,表示匹配所有小写英文字母;  (2)量词说明表达式出现的次数,如“x[1,2]”表示“x”可以至少有一个,至多两个。 在计算机语言中,标识符通常要求以字母或下画线开头,后面可以是字母、数字和下画线。满足条件的标识符表示为: " [A-Za-z_]+[A-Za-z_0-9]* " 。     类似的正则表达式量词见下表。      (3)“^”、“$”、“\b”都是正则表达式的断言,正则表达式的断言见下表。          

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关频道:

用户评论