QT开发(二十七)——QT常用类(一)

一、QString

1QString简介

    QString提供了Unicode编码的字符串,使用隐式共享技术来节省内存和不必要的数据拷贝,不必考虑跨平台的兼容性。

    QString类成员函数中除了 ascii()、latin1()、utf8()、local8Bit()函数,其他所有的函数都是可重入的。

2、QString成员函数

QString::QString ( const QChar * unicode, int size )

QString::QString ( const QChar * unicode )

QString::QString ( const QString & other )

QString::QString ( const char * str )

QString::QString ( const QByteArray & ba )

构造函数

QString & QString::append ( const QString & str )

QString & QString::append ( const QByteArray & ba )

QString & QString::append ( const char * str )

QString & QString::append ( QChar ch )

在字符串尾部插入字符ch

QString QString::arg ( const QString & a1, const QString & a2, const QString & a3, const QString & a4 ) const

const QChar QString::at ( int position ) const

返回字符串中位置pos的字符

iterator QString::begin ()

const_iterator QString::begin () const

返回指向字符串的第一个字符的迭代器

int QString::capacity () const

返回字符串能存储的最大字节数

void QString::chop ( int n )

删除字符串尾部开始的n个字节

void QString::clear ()

清除字符串内容并置空

int QString::compare ( const QString & s1, const QString & s2, Qt::CaseSensitivity cs ) [static]

int QString::compare ( const QString & s1, const QString & s2 ) [static]

字符串比较

const QChar * QString::constData () const

返回指向字符串所存储数据的指针

bool QString::contains ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

bool QString::contains ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

字符ch是否包含在字符串中

int QString::count ( const QString & str, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

int QString::count ( QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

字符ch在字符串中出现的次数

int QString::count () const

字符串中的字节数

QChar * QString::data ()

const QChar * QString::data () const

返回指向字符串所存储数据的指针

iterator QString::end ()

const_iterator QString::end () const

返回指向字符串最后一个字符的下一个位置的迭代器

bool QString::endsWith ( const QString & s, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const

如果字符串以字符串s结尾,返回true

QString & QString::fill ( QChar ch, int size = -1 )

设置字符串中的每个字符用ch填充

QString QString::fromAscii ( const char * str, int size = -1 ) [static]

返回一个使用字符串str的前size字节初始化的字符串

QString QString::fromLocal8Bit ( const char * str, int size = -1 ) [static]

返回一个使用8位编码字符串str的前size字节初始化的字符串

QString QString::fromRawData ( const QChar * unicode, int size ) [static]

返回使用数组unicode的前size个Unicode字节构造的字符串

QString QString::fromStdString ( const std::string & str ) [static]

返回字符串str的副本

QString QString::fromUtf8 ( const char * str, int size = -1 ) [static]

返回UTF-8编字符串str的前size字节初始化的字符串

QString QString::fromUtf16 ( const ushort * unicode, int size = -1 ) [static]

QString & QString::insert ( int position, const QString & str )

在字符串的位置pos插入字符串str

QString QString::left ( int n ) const

返回字符串中最左边n个字符的字符串

3QString实例

字符串操作

    Qt组合字符串的另一个函数楇 QString::sprintf(),此函数支持的格式定义符和C++库中的函数sprintf定义的一样。Qt还提供了另外一种方便的字符串组合方 式,使用QString::arg()函数,此函数的重载可以处理多种数据类型,一些重载具有额外的参数对字段的宽度、数字基数或者浮点数精度进行控制。 相对于sprintf来说,srg是一个比较好的解决方案,因为它类型安全,完全支持Unicode,并且允许改变"%n"参数的顺序

QString str;

str=QString("%1 was born in %2 .").arg("Rimond").arg(1990);

//str="Rimond was born in 1990"

字符串转换

    QString类提供了丰富的转换函数,可以实现讲一个字符串转换为数值类型或者其他的字符编码集。

    QString::toInt()函数实现了将字符串转换为整型数值,类似的函数还有toDouble()、toFloat()、toLong()、toLongLong()等。

    QString提供的字符串编码集的转换函数将会返回一个const char*类型版本的QByteArry,即构造函数QByteArry(const char*)构造的QByteArry对象。QByteArry类具有一个字符数组,它既可以存储原始字节(raw bytes),也可以存储传统的以“\0”结尾的8位的字符串。在Qt中,使用QByteArry比使用const char*更为方便,且QByteArry也支持隐式共享,转换函数有以下几种。

toAscii()返回一个ASCII编码的8位字符串

toLatin1()返回一个Latin-1编码的8位字符串

toUtf8()返回一个utf-8编码的8位字符串

toLocal8Bit()返回一个系统本地编码的8位字符串

二、QTextCodec

1QTextCodec简介

    QT默认使用Unicode编码,不能显示中文,而操作系统默认一般为本地的编码,如GB2312,因此需要修改QT中的编码方式显示中文。

    QTextCodec提供了不同编码文本之间的转换。

    QT使用Unicode编码存储、绘制、操作字符串。很多情况下,需要使用不同的编码方式处理字符串。QT提供了一套QTextCodec类用于在Unicode和非Unicode编码间转换。

使用不同编码方式读写文件时,可以使用QTextStream及其setCodec()函数。

2、QTextCodec成员函数

QTextCodec * QTextCodec::codecForCStrings () [static]

返回QString与 const char *QByteArray的相互转换的编码方式的指针

QTextCodec * QTextCodec::codecForLocale () [static]

返回指向最适合本地的编码方式的指针

QTextCodec * QTextCodec::codecForName ( const QByteArray & name ) [static]

QTextCodec * QTextCodec::codecForName ( const char * name ) [static]

搜索所有安装的编码方式,返回与name最匹配的编码方式

QString QTextCodec::toUnicode ( const char * chars ) const

QString QTextCodec::toUnicode ( const char * input, int size, ConverterState * state = 0 ) const

QString QTextCodec::toUnicode ( const QByteArray & a ) const

返回使用Unicode编码后的字符串

3、QTextCodec实例

Unicode编码字符串转化为本地编码字符串

 QString string = "...";

 QTextCodec *codec = QTextCodec::codecForName("KOI8-R");

 QByteArray encodedString = codec->fromUnicode(string);

三、QByteArray

1QByteArray简介

    QByteArray提供一个字节数组,可以像C++数组一样使用。

    QByteArray用于存储原始字节数据(包括\0经典的8位编码的字符串数据\0结束使用QByteArrayconst char *更方便。背后原因其实是,QByteArray总会确保数据以\0结束,并且使用隐式共享技术减少内存开销和不必要的数据拷贝。

    QByteArray自动的保证最后一个字节之后的那位的值是“\0”,导致QByteArray可以容易的转变为const char*,同样作为存储二进制的数据类型,QByteArray中间也可以存储“\0”。

2QByteArray成员函数

QByteArray::QByteArray ()

QByteArray::QByteArray ( const char * str )

QByteArray::QByteArray ( const char * data, int size )

QByteArray::QByteArray ( int size, char ch )

QByteArray::QByteArray ( const QByteArray & other )

构造函数

QByteArray & QByteArray::append ( const QByteArray & ba )

在字节数组尾部追加字节数组ba

QByteArray & QByteArray::append ( const QString & str )

QByteArray & QByteArray::append ( const char * str )

在字节数组尾部追加字符串str

QByteArray & QByteArray::append ( const char * str, int len )

在字节数组尾部追加字符串str中的前len个字节

QByteArray & QByteArray::append ( char ch )

在字节数组尾部追加字符ch

char QByteArray::at ( int i ) const

返会字节数组中的第i个字节

int QByteArray::capacity () const

返回字节数组能够存储的最大字节数

void QByteArray::chop ( int n )

从字节数组尾部开始向前删除n字节

void QByteArray::clear ()

清除字节数组的内容并置空

const char * QByteArray::constData () const

返回指向字节数组所存储数据的指针

bool QByteArray::contains ( const QByteArray & ba ) const

如果字节数组中包含字节数组ba,返回true

bool QByteArray::contains ( const char * str ) const

如果字符数组中包含字符串str,返回true

bool QByteArray::contains ( char ch ) const

如果字节数组中包含字符ch,返回true

int QByteArray::count ( const QByteArray & ba ) const

返回字节数组中字节数组ba出现的次数

int QByteArray::count ( const char * str ) const

返回字节数组中字符串str出现的次数

int QByteArray::count ( char ch ) const

返回字节数组中字符ch出现的次数

int QByteArray::count () const

返回字节数组中的字节数

char * QByteArray::data ()

const char * QByteArray::data () const

返回指向字节数组中的数据的指针

bool QByteArray::endsWith ( const QByteArray & ba ) const

bool QByteArray::endsWith ( const char * str ) const

bool QByteArray::endsWith ( char ch ) const

字节数组是否以字符结尾

QByteArray & QByteArray::fill ( char ch, int size = -1 )

使用字符ch填充字节数组内容

QByteArray QByteArray::fromBase64 ( const QByteArray & base64 ) [static]

返回Base64数组base64解码后的副本

QByteArray QByteArray::fromHex ( const QByteArray & hexEncoded ) [static]

返回hex编码数组hexEncoded解码后的副本

QByteArray QByteArray::fromRawData ( const char * data, int size ) [static]

使用数组data的前size字节构造一个字节数组

QByteArray & QByteArray::insert ( int i, const QByteArray & ba )

在字节数组的位置i插入字节数组ba

QByteArray & QByteArray::insert ( int i, const QString & str )

QByteArray & QByteArray::insert ( int i, const char * str )

QByteArray & QByteArray::insert ( int i, const char * str, int len )

QByteArray & QByteArray::insert ( int i, char ch )

在字节数组的位置i插入字符ch

QByteArray QByteArray::left ( int len ) const

返回字节数组的最左边的len个字节的字节数组

QByteArray QByteArray::leftJustified ( int width, char fill = ' ', bool truncate = false ) const

返回包含本字节数组的大小为width的字节数组,使用字符fill填充

int QByteArray::length () const

返回字节数组的大小

QByteArray & QByteArray::prepend ( const QByteArray & ba )

QByteArray & QByteArray::prepend ( const char * str )

QByteArray & QByteArray::prepend ( const char * str, int len )

QByteArray & QByteArray::prepend ( char ch )

在字节数组的开始前插字符ch

QByteArray & QByteArray::remove ( int pos, int len )

在字节数组的位置pos开始删除len字节

QByteArray & QByteArray::replace ( int pos, int len, const QByteArray & after )

QByteArray & QByteArray::replace ( int pos, int len, const char * after )

QByteArray & QByteArray::replace ( int pos, int len, const char * after, int alen )

QByteArray & QByteArray::replace ( const QByteArray & before, const QByteArray & after )

QByteArray & QByteArray::replace ( const char * before, const QByteArray & after )

QByteArray & QByteArray::replace ( const char * before, int bsize, const char * after, int asize )

QByteArray & QByteArray::replace ( const QByteArray & before, const char * after )

QByteArray & QByteArray::replace ( const QString & before, const QByteArray & after )

QByteArray & QByteArray::replace ( const QString & before, const char * after )

QByteArray & QByteArray::replace ( const char * before, const char * after )

QByteArray & QByteArray::replace ( char before, const QByteArray & after )

QByteArray & QByteArray::replace ( char before, const QString & after )

QByteArray & QByteArray::replace ( char before, const char * after )

QByteArray & QByteArray::replace ( char before, char after )

QByteArray QByteArray::toBase64 () const

返回字节数组数据的BASE64编码后的字节数组

double QByteArray::toDouble ( bool * ok = 0 ) const

返回字节数组转换为的double值

3、QByteArray实例

 QByteArray ba;

 ba.resize(5);

 ba[0] = 0x3c;

 ba[1] = 0xb8;

 ba[2] = 0x64;

 ba[3] = 0x18;

 ba[4] = 0xca;

QByteArray x("and");

 x.prepend("rock ");         // x == "rock and"

 x.append(" roll");          // x == "rock and roll"

 x.replace(5, 3, "&");       // x == "rock & roll"

四、QVariant

1QVariant简介

    QVariant是一种可以存储不同类型的数据结构,相当于QT中大多数数据类型的共用体。

    由于C++禁止使用含有非默认构造函数和析构函数的类型的共用体,大多数QT类并不使用共用体。如果没有QVariant,对于QObject对象属性和数据库的工作可能是个问题。

QVariant对象每次只能存储一种数据类型,QVariant对象存储的数据的放入和取出必须是相对应的,存入过程会调用QVariant对于相应数据类型的构造函数,取出数据时同样需要调用QVariant对于相应数据类型的成员函数。

    QVariant对象是否可以转换到指定的数据类型可以调用canConvert(type)成员函数。QVariant对象转换为存储类型的类型转换函数通常命名为toT()。

    QVariant对象可以存储很多QT的数据类型,包括QBrush、QColor、QCursor、QDataTime、QFont、 QKeySequence、QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,以及基本类型int、float等。Qvariant还可以存储很多集合类型,如QMap<QString,QVariant>QStringList和 QList<QVariant>。其中item view classes数据库模块和QSettings都大量使用了QVariant类,方便读写数据。

2、QVariant成员函数

全局函数

bool qVariantCanConvert ( const QVariant & value )

如果给定的value能转换为指定的模板类型type,返回true

QVariant qVariantFromValue ( const T & value )

将给定模板类型T的value转换为QVariant

void qVariantSetValue ( QVariant & variant, const T & value )

variant设置为给定模板类型T的value副本

T qVariantValue ( const QVariant & value )

模板函数,将value转换为模板类型T的对象

T qvariant_cast ( const QVariant & value )

value转换为模板类型T的对象

成员函数

T QVariant::value () const

模板函数,返回存储的类型T的值

int QVariant::userType () const

返回存储在QVariant中的数据的类型

const char * QVariant::typeName () const

返回存储在QVariant中的数据类型的名字

Type QVariant::type () const

返回存储在QVariant中的数据的存储类型

void QVariant::setValue ( const T & value )

value的副本存储到QVariant对象

void QVariant::clear ()

QVariant转换为无效类型,释放使用资源

bool QVariant::convert ( Type t )

强制转换QVariant对象为类型t

QVariant QVariant::fromValue ( const T & value ) [static]

将类型T的value的副本转换为QVariant

bool QVariant::canConvert ( Type t ) const

模板函数,如果QVariant能被强制转换为t类型,返回true

3、自定义QVariant存储的数据类型

    自定义QVariant存储的数据类型必须有一个默认的构造函数和一个拷贝构造函数,同时必须使用Q_DECLARE_METATYPE()宏放在类的声明所在头文件的面。

human humen ;  

QVariant variant = QVariant::fromValue(humen );  

// ...  

if (variant.canConvert<human >()) {  

    human h= variant.value<human>();  

    // ...  

}

4QVariant实例

 QVariant v(709);

    //声明一个QVariant变量v,并初始化为一个整数。

    qDebug()<<v.toInt();

    //调用QVariant::toInt()函数将QVariant变量包含的内容转换为整数并输出。

    QVariant w("How are you! ");

    //声明一个QVariant变量w,并初始化为一个字符串。

    qDebug()<<w.toString();

    //调用QVariant::toString()函数将QVariant变量包含的内容转换为字符串并输出。

    QMap<QString,QVariant>map;

    //声明一个QMap变量map,使用字符串作为键,QVariant变量作为值。

    map["int"]=709;

    map["double"]=709.709;

    map["string"]="How are you! ";

    map["color"]=QColor(255,0,0);

    qDebug()<<map["int"]<< map["int"].toInt();

    qDebug()<<map["double"]<< map["double"].toDouble();

    qDebug()<<map["string"]<< map["string"].toString();

    qDebug()<<map["color"]<< map["color"].value<QColor>();

    //QVariant变量中保存了一个QColor对象,并使用模板QVariant::value()还原为QColor,然后输出。

    QStringList sl;

    sl<<"A"<<"B"<<"C"<<"D";

    QVariant slv(sl);

    if(slv.type()==QVariant::StringList)

    //QVariant::type()函数返回存储在QVariant变量中的值的数据类型。QVariant::StringListQt定义的一个QVariant::type枚举类型的变量

    {

        QStringList list=slv.toStringList();

        for(int i=0;i<list.size();++i)

            qDebug()<<list.at(i);

    }

五、QDate

1 QDate简介

     QDate类对象包含日历日期,可以从当前系统时钟中读取当前日期,提供了日期比较和操作的函数。

 QDate所有成员函数是可重入的。

 2QDate成员函数

 QDate主要成员函数如下:

QDate::QDate ()

QDate::QDate ( int y, int m, int d )

构造函数

QDate QDate::currentDate () [static]

返回当前日期

QDate QDate::addDays ( int ndays ) const

返回增加ndays天后的日期

QDate QDate::addMonths ( int nmonths ) const

返回增加nmonths个月后的日期

QDate QDate::addYears ( int nyears ) const

返回增加nyears年后的日期

int QDate::day () const

返回日期所在月份的第几天

int QDate::dayOfWeek () const

返回日期所在周的第几天

int QDate::dayOfYear () const

返回日期所在年中的第几天

int QDate::daysTo ( const QDate & d ) const

返回日期到日期d的天数

void QDate::getDate ( int * year, int * month, int * day )

获取日期的相应年月日到相应参数

bool QDate::isLeapYear ( int year ) [static]

日期是否是闰年

bool QDate::setDate ( int year, int month, int day )

设置日期

QString QDate::toString(const QString & format) const

将日期按指定格式转换为QString

int QDate::year () const

返回日期中的年

int QDate::month () const

返回日期中的月

六、QDateTime

1QDateTime简介

    QDateTime类对象包含日历日期和时钟时间,是QDateQTime的结合,可以从当前系统时间读取出日期时间,提供了比较和操作日期时间的函数。

2QDateTime成员函数

QDateTime主要成员函数如下:

QDateTime::QDateTime()

QDateTime::QDateTime(const QDate & date)

QDateTime::QDateTime(const QDate & date, const QTime & time, Qt::TimeSpec spec = Qt::LocalTime)

QDateTime::QDateTime(const QDateTime & other)

构造函数

QDateTime QDateTime::addDays ( int ndays ) const

QDateTime QDateTime::addMSecs ( qint64 msecs ) const

QDateTime QDateTime::addMonths ( int nmonths ) const

QDateTime QDateTime::addSecs ( int s ) const

QDateTime QDateTime::addYears ( int nyears ) const

增加时间

QDateTime QDateTime::currentDateTime () [static]

根据本地时区返回系统时钟的日期时间

QDateTime QDateTime::currentDateTimeUtc () [static]

根据UTC时区返回系统时钟的日期时间

QDate QDateTime::date () const

返回日期时间中的日期部分

int QDateTime::daysTo ( const QDateTime & other ) const

返回日期时间到日期时间other的天数

QDateTime QDateTime::fromString(const QString & string, const QString & format) [static]

根据指定的日期时间格式和字符串返回日期时间

int QDateTime::secsTo ( const QDateTime & other ) const

返回日期时间到日期时间other的秒数

void QDateTime::setDate ( const QDate & date )

设置日期

void QDateTime::setTime ( const QTime & time )

设置时间

void QDateTime::setTimeSpec ( Qt::TimeSpec spec )

设置时间的秒数

QTime QDateTime::time () const

返回日期时间的时间部分

QString QDateTime::toString ( const QString & format ) const

根据指定格式将日期时间转换为字符串

QDateTime QDateTime::toUTC () const

将日期时间转换为UTC日期时间