QString类
/* 声明:qt_note_x部分内容,根据《Qt 5.9 C++开发指南》,进行整理。
*/
1.普通数值与字符串之间的转换
1.1 QString 类从字符串->整数转换函数:
int toInt(bool *ok)=Q_NULLPTR,int base=10) const //base=10,表示十进制;
long toLong(bool *ok)=Q_NULLPTR,int base=10) const
short toShort(bool *ok)=Q_NULLPTR,int base=10) const
uint toUInt(bool *ok)=Q_NULLPTR,int base=10) const //无符号整型
ulong toULong(bool *ok)=Q_NULLPTR,int base=10) const//无符号长整型
/*----------------------------------------------------------------------*/
#include <QCoreApplication>
#include<QString>
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str_Num="18";
string std_string=str_Num.toStdString();/*注意Qstring字符不能直接通过std::cout
进行直接输出,需要先通过.toStdString转
换成std::string,然后进行输出;
*/
cout<<std_string<<endl;
int Int_Num= str_Num.toInt();
cout<<Int_Num<<endl;
long Long_Num=str_Num.toULong();
cout<<Long_Num<<endl;
short Short_Num=str_Num.toShort();
uint Num_unit=str_Num.toUInt();
ulong Num_Ulong=str_Num.toULong();
return a.exec();
}
1.2字符串->浮点数
double toDouble(bool *ok)=Q_NULLPTR,int base=10) const
float toFloat(bool *ok)=Q_NULLPTR,int base=10) const
/*----------------------------------------------------------------------*/
2.进制转换
讲一个整数转换成不同进制的字符串,可以使用Qstring的函数setNum()或者静态函数number()
QString &setNum(int n,int base=10);/*n是待转换的整数,base=10表示十进制。可以根据转换类型进行调整base,例如base=2(二进制),base=16(十六进制)*/
QString number(int n,int base=10);
/*----------------------------------------------------------------------*/
2.1
#include <QCoreApplication>
#include<QString>
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString str_Num="18";
string std_string=str_Num.toStdString();/*注意Qstring字符不能直接通过std::cout
进行直接输出,需要先通过.toStdString转
换成std::string,然后进行输出;
*/
cout<<std_string<<endl;
int Int_Num= str_Num.toInt();//缺省表示十进制
cout<<Int_Num<<endl;
QString str_Num_16=QString::number(Int_Num,16);//转成16进制;
string str_std_16=str_Num_16.toStdString();
cout<<"转换成十六进制\n"<<str_std_16<<endl;
QString str_Num_2=str_Num.setNum(Int_Num,2);
string str_std_2=str_Num_2.toStdString();
cout<<"转换成二进制\n"<<str_std_2<<endl;
QString str_2="10101010";
bool ok;
int val=str_2.toInt(&ok,2);//以二进制读入;转换后为10进制
cout<<val<<endl;//170
QString str_10=QString::number(val,10);
string str_std_10=str_10.toStdString();
cout<<"转换成十进制\n"<<str_std_10<<endl;
QString str_16=str_2.setNum(val,16);
str_16=str_16.toUpper();
str_std_16=str_16.toStdString();
cout<<"转换成十六进制\n"<<str_std_16<<endl;
return a.exec();
}
1.QString &setNum(int n,int base=10)与QString number(int n,int base=10);都是将n转换为其他进制;
2.返回值均是QString类型;
3.个人建议使用,QString::number()清新明了;
4. QString str_16=str_2.setNum(val,16);是将val的值进行转换,与str_2无关;
5.进制转换是建立在十进制转换的基础上的。初值是二进制时,需要通过.toInt(&ok,2);进行转换。
3.1 append()与prepend():
append()在字符串后面添加字符串,prepend()在字符串的前面添加字符串
QString str1="hello";
QString str2="Qt";
QString str3=str1;
str1.append(str2);// str1+str2
str3.prepend(str2);//str2+str3
3.2 toUpper()与toLower()
toUpper()将字符串内的字母全部转换成为大写形式,toLower()将字母全部转换成小写形式;
QString str1="Hello World",str2;
str2=str1.toUpper();
str2=str1.toLower();
3.3 count()、size()、length()
三者皆是返回字符串的字符个数。注:一个汉字算一个字符串;
QString str1="Hello World";
int N=str1.size();
int N_=str1.count();
int N_1=str1.length();
3.4 trimme()、simplified()
trimme()去掉字符串首尾的空格,simplified()不仅去掉首尾的空格,中间连续的空格也只保留一个;
QString str1=" Hello world",str2,str3;
str2=str1.trimmed();
str3=str1.simplified();
3.5 indexOf()、lastIndexOf()
int indexOf(const QString &str, int from=0, Qt::CaseSensitivity cs=Qt::CaseSensitivity) const;
//在自身字符串内查找参数字符串str出现的位置,参数from是开始查找的位置,Qt::CaseSensitivity cs指定是否区分大小写;
lastIndexOf()//查找某个字符串最后出现的位置。
QString str1=" Hello world world ",str2,str3;
str2="Hello";
int position=str1.indexOf(str2);
int position_=str1.lastIndexOf("world");
3.6** isNull()、isEmpty()**
两个函数都是判断字符串是否为空,但是稍有差别。如果一个空字符串,只有“\0”,isNull()返回false,而isEmpty()返回true;
QString str1,str2="";
N=str1.isNull();//N=true;
N=str2.isNull(); //N=fasle;
N=str1,isEmpty();//N=true;
N=str2,isEmpty();//N=true;
3.7 contain()
contain():判断字符串内是否包含某个字符串,可指定是否区分大小写;
QString str1=" Hello world world ",str2;
str2="Hello";
N=str1.constain(str2);//ture
3.8 endsWith()、startsWith()
startsWith():判断是否以某个字符串开头。endsWith()判断是否以某个字符串结束;
QString str="Hello world";
N=str.statsWith("Hello");//ture
N=str.endsWith("world");//ture
3.9 left()、right()
left():从字符串中,取左边多少个字符;
right():从字符串中,取右边多少个字符;<注:一个汉字是一个字符>
QString str="Hello world",str2;
str2=str.left(5);//Hello
str2=str.right(5);//world
3.10 section()
QString section(const QString &in_sep, int start, int end = -1, SectionFlags flags = SectionDefault) const;//从字符串中提取,以in_sep作为分隔符,从star端到end端的字符串;
重绘事件的处理函数 :paintEvent()
基础部件类Qwidget提供的paintEvent函数,是纯虚函数;继承它的子类想用它,必须重新实现它。下列情况会发生重绘事件:
a)当窗口部件第一次显示时,系统会自动产生一个绘图事件;
b)repaint()与update()函数被调用时;
c)当窗口部件被其他部件遮挡,然后又再次显示出来时,就会对隐藏的区域产生一个重绘事件。
d) 重新调整窗口大小时。