QT开发(二十七)——QT常用类(一)
一、QString
1、QString简介
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个字符的字符串
3、QString实例
字符串操作
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
1、QTextCodec简介
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
1、QByteArray简介
QByteArray提供一个字节数组,可以像C++数组一样使用。
QByteArray用于存储原始字节数据(包括’\0’)和经典的8位编码的字符串数据(‘\0’结束),使用QByteArray比const char *更方便。背后原因其实是,QByteArray总会确保数据以‘\0’结束,并且使用隐式共享技术减少内存开销和不必要的数据拷贝。
QByteArray自动的保证最后一个字节之后的那位的值是“\0”,导致QByteArray可以容易的转变为const char*,同样作为存储二进制的数据类型,QByteArray中间也可以存储“\0”。
2、QByteArray成员函数
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
1、QVariant简介
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
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 h= variant.value
// ...
}
4、QVariant实例
QVariant v(709);
//声明一个QVariant变量v,并初始化为一个整数。
qDebug()<
//调用QVariant::toInt()函数将QVariant变量包含的内容转换为整数并输出。
QVariant w("How are you! ");
//声明一个QVariant变量w,并初始化为一个字符串。
qDebug()<
//调用QVariant::toString()函数将QVariant变量包含的内容转换为字符串并输出。
QMap
//声明一个QMap变量map,使用字符串作为键,QVariant变量作为值。
map["int"]=709;
map["double"]=709.709;
map["string"]="How are you! ";
map["color"]=QColor(255,0,0);
qDebug()<
qDebug()<
qDebug()<
qDebug()<
//在QVariant变量中保存了一个QColor对象,并使用模板QVariant::value()还原为QColor,然后输出。
QStringList sl;
sl<<"A"<<"B"<<"C"<<"D";
QVariant slv(sl);
if(slv.type()==QVariant::StringList)
//QVariant::type()函数返回存储在QVariant变量中的值的数据类型。QVariant::StringList是Qt定义的一个QVariant::type枚举类型的变量
{
QStringList list=slv.toStringList();
for(int i=0;i
qDebug()<
}
五、QDate
1、 QDate简介
QDate类对象包含日历日期,可以从当前系统时钟中读取当前日期,提供了日期比较和操作的函数。
QDate所有成员函数是可重入的。
2、QDate成员函数
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
1、QDateTime简介
QDateTime类对象包含日历日期和时钟时间,是QDate合QTime的结合,可以从当前系统时间读取出日期时间,提供了比较和操作日期时间的函数。
2、QDateTime成员函数
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日期时间