QString和QLatin1String有什么区别?

mac*_*.ma 9 qt

像标题一样

1. QString和QLatin1String之间有什么区别?

2.何时何地我需要使用其中一个?

3.following:

QString str;
str = "";
str = QLatin1String("");
Run Code Online (Sandbox Code Playgroud)

""== QLatin1String("")??

Fra*_*eld 13

QString持有unicode.字符串文字"foo"是一个字节序列,可以包含任何编码的文本.将字符串文字分配给QString时QString str = "foo",会隐式地将未定义编码的字节序列转换为保存unicode的QString.QString(const char*)构造函数假定为ASCII,并且将像您键入一样进行转换QString str = QString::fromAscii("foo").如果在源文件中使用非ascii文字(例如,UTF-8中的日语字符串文字),或者从您从其他地方(文件,套接字等)读取的char*或QByteArray传递字符数据,则会中断.因此,最好将unicode QString世界和字节数组QByteArray/char*世界分开,并且只在这两者之间进行明确转换,明确说明要用哪种编码在这两者之间进行转换.可以定义QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII来强制显式转换(在编写任何类型的解析器时我总是会启用它们).现在,要使用显式转换将latin1字符串文字分配给QString变量,可以使用

QString foo = QString::fromLatin1("föö");
Run Code Online (Sandbox Code Playgroud)

要么

QString foo = QLatin1String("föö");
Run Code Online (Sandbox Code Playgroud)

两者均声明文字以latin1编码,并允许"编码安全"转换为unicode.我发现QLatin1String更好阅读,QLatin1String文档解释了为什么它在某些情况下也会更快.

包装字符串文字,或者在某些情况下QByteArray或char*变量,保存latin1数据进行转换是QLatin1String的主要用途,不会使用QLatin1String作为方法参数,成员变量或临时数据(所有QString).