QString和QLatin1String有什么区别?

时间:2012-02-22 09:10:27

标签: qt

喜欢标题

  

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

     

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

     

3.following:

QString str;
str = "";
str = QLatin1String("");

"" == QLatin1String("") ??

2 个答案:

答案 0 :(得分:11)

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 * world分开并且仅在这两者之间进行明确转换是明智的做法,明确说明要使用哪种编码在这两者之间进行转换。可以定义QT_NO_CAST_FROM_ASCII和QT_NO_CAST_TO_ASCII来强制显式转换(在编写任何类型的解析器时我总是会启用它们)。 现在,要使用显式转换将latin1字符串文字分配给QString变量,可以使用

QString foo = QString::fromLatin1("föö");

QString foo = QLatin1String("föö");

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

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

答案 1 :(得分:0)

QString是基于Unicode的,而QLatin1String是基于US-ASCII / Latin-1的

Unicode是US-ASCII / Latin-1的超级集合。如果您只处理US-ASCII / Latin-1字符,则两者对您来说都是一样的。

http://doc.qt.io/qt-4.8/qstring.html

http://doc.qt.io/qt-4.8/qlatin1string.html