QT的基础数据类型 点击这里查看
这里只是列举一些常用的,转换函数用法其实都是相似的,剩下的还是得自己翻文档罗。
int QString::toInt(bool * ok = 0, int base = 10) const
转换发生错误,或者转换不成功ok为false;发生错误时,返回值为0。base 为转换进制
该方法有很大的局限性,要转换的字符串中只能有0-9的字符组成,如果含有其他字符,转换将会失败
double QString::toDouble(bool * ok = 0) const
转换发生错误,或者转换不成功ok为false;发生错误时,返回值为0.0。
支持将科学计数法转成double,不支持处理千组分隔符。
float QString::toFloat(bool * ok = 0) const
转换发生错误,或者转换不成功ok为false;发生错误时,返回值为0.0。
QString str = "11.55";
bool ok;
int a = str.toInt(&ok);
//当str出现除了0-9这些数字的其他符号(不包括" - "),将会转换失败,即只支持整数的转换
//str = "11" true
//str = "-11" true
qDebug() << ok << " a =" << a; //false a = 0
double b = str.toDouble(&ok);
qDebug() << ok << " b =" << b; //true b = 11.55
float c = str.toFloat(&ok);
qDebug() << ok << " c =" << c; //true c = 11.55
下面介绍的转换成QString是用了同一个函数不同的重载而已。
QString QString::number(int n, int base = 10) [static]
n为需要转换的数字,base转换进制
QString QString::number(double n, char format = ‘g’, int precision = 6) [static]
n为需要转换的数字;format格式,根据指定的格式和精度进行格式化;precision 精度,默认精度为6
QString & QString::setNum(int n, int base = 10)
将n以base进制转为QString
int a = 123;
double b = 123.456;
float c = 465.12;
QString strA = QString::number(a);
qDebug() << "strA = " << strA; //strA = "123"
QString strB = QString::number(b);
qDebug() << "strB = " << strB; //strB = "123.456"
QString strC = QString::number(c);
qDebug() << "strC = " << strC; //strC = "465.12"
QString strD;
strD.setNum(a); //strD = "123"
Expression | Output |
---|---|
d | 不带前导零的日(1到31) |
dd | 以零开头的数字表示的日期(01到31) |
ddd | 缩写的本地化日名称(例如,“Mon”到“Sun”)。使用系统区域设置本地化名称,即QLocale::system() |
dddd | 长的本地化日名称(例如,“Monday”到“Qt::Sunday”)。使用系统区域设置本地化名称,即QLocale::system() |
M | 不带前导零的月份(1-12) |
MM | 月份作为数字,前导零(01-12) |
MMM | 简略的本地化月份名称(例如“Jan”到“Dec”)。使用系统区域设置本地化名称,即QLocale::system() |
MMMM | 本地化的长月份名称(例如“一月”到“十二月”)。使用系统区域设置本地化名称,即QLocale::system() |
yy | 年份为两位数(00-99) |
yyyy | 四位数年份 |
Expression | Output |
---|---|
h | 没有前导零的小时(如果显示AM/PM,则为0到23或1到12) |
hh | 前导零的小时(如果显示AM/PM,则为00到23或01到12) |
H | 没有前导零的小时(0到23,即使有AM/PM显示) |
HH | 前导零的小时(00到23,即使有AM/PM显示) |
m | 没有前导零的分钟(0到59) |
mm | 前导零的分钟(00到59) |
s | 没有前导零的秒(0到59) |
ss | 前导零的秒(00到59) |
z | 不带前导零的毫秒(0到999) |
zzz | 带前导零的毫秒(000到999) |
AP or A | 使用AM/PM显示器。A/AP将替换为“AM”或“PM”。 |
ap or a | 使用am/pm显示器。a/ap将替换为“am”或“pm”。 |
t | 时区(例如“CEST”) |
QString QDateTime::toString(const QString & format) const
format:指定格式
例子:
QString str;
//需要包含头文件 #include
QDateTime Mytime;
//获取本地(本机)当前时间
Mytime = QDateTime::currentDateTime();
//按指定格式,转化字符串
str = Mytime.toString("yyyy-MM-dd HH:mm:ss");
qDebug() << str; //"2019-11-20 16:11:08"
QDateTime QDateTime::fromString(const QString & string, Qt::DateFormat format = Qt::TextDate) [static]
string 是需要转换的字符串,format 是格式
例子:
QString str = "2019-11-20 16:39:00";
QDateTime MyTime;
MyTime = QDateTime::fromString(str,"yyyy-MM-dd HH:mm:ss");
qDebug() << MyTime;
//输出结果为:QDateTime("2019-11-20 16:39:00.000 中国标准时间 Qt::LocalTime")
QByteArray QString::toLatin1() const
以QByteArray的形式返回字符串的Latin-1表示形式。
如果字符串包含非拉丁字符,则返回的字节数组未定义。这些字符可以被取消或用问号代替
不支持中文,包含中文会乱码
QByteArray QString::toUtf8() const
以QByteArray的形式返回字符串的UTF-8表示形式。
UTF-8是一个Unicode编解码器,可以像QString一样表示Unicode字符串中的所有字符
支持中文
QString str = "My name is Li Hua哈";
QByteArray MyByteArray;
MyByteArray = str.toLatin1();
//"str = My name is Li Hua MyByteArray = My name is Li Hua?"
//有中文会乱码
qDebug() << "str = " << str << " MyByteArray = " << MyByteArray;
MyByteArray = str.toUtf8();
//"str = My name is Li Hua MyByteArray = My name is Li Hua哈"
qDebug() << "str = " << str << " MyByteArray = " << MyByteArray;
QString::QString(const QByteArray & ba)
QString的构造函数,使用ba构造一个QString
例子:
QString str = "My name is Li Hua 哈哈";
//由于使用了toLatin1转换的不支持中文,包含的中文会乱码,所以我使用了toUtf8
//但是我上网搜了一下,好像没有人会这样转Char *,是不是有什么风险?这个本人就不得而知,测试结果是真香可观
QByteArray MyByteArray = str.toUtf8();
char *myChar = MyByteArray.data();
qDebug() << myChar;
//下面这个写法是错误的,不能串行写。
//myChar = str.toUtf8().data();
//qDebug() << myChar
从QByteArray转到char *的时候用到了data()
char * QByteArray::data()
返回char * ,以’\0’结尾的数据,即返回的字符串中的字节数是size() + 1,代表’\0’结尾.
上方例子中提到了不能串行写,这是为啥?
这里解释了为啥不能这样写
例子:
QString str = "My name is Li Hua 哈哈";
std::string myStr = str.toStdString();
const char * myChar = myStr.c_str();
qDebug() << myChar;
std::string QString::toStdString() const
1.返回一个std::string对象,其数据包含在这个QString中。
2.使用toUtf8()函数将Unicode数据转换为8位字符。
3.这个操作符主要用于将QString传递给接受std::string对象的函数。
4.如果QString包含非latin1 Unicode字符,那么使用它可能会导致信息丢失
使用 c_str() 转换过来的char * 是带const 修饰的,如果想要去掉const修饰,请使用
对它进行转换。
char * myCharStr = const_cast<char *>(myChar);
直接调用QString的构造函数
QString(const char * str)
将str构造一个QString对象。