QString

通常在Qt中文本操作是基于unicode完成的。你需要使用QString类来完成这个事情。它包含了很多好用的功能函数,这与其它流行的框架类似。对于8位的数据你通常需要使用QByteArray类,对于ASCII校验最好使用QLatin1String来暂存。对于一个字符串链你可以使用QList<QString>或者QStringList类(派生自QList<QString>)。

这里有一些例子介绍了如何使用QString类。QString可以在栈上创建,但是它的数据存储在堆上。分配一个字符串数据到另一个上,不会产生拷贝操作,只是创建了数据的引用。这个操作非常廉价让开发者更专注于代码而不是内存操作。QString使用引用计数的方式来确定何时可以安全的删除数据。这个功能叫做隐式共享,在Qt的很多类中都用到了它。

  1. QString data("A,B,C,D"); // create a simple string
  2. // split it into parts
  3. QStringList list = data.split(",");
  4. // create a new string out of the parts
  5. QString out = list.join(",");
  6. // verify both are the same
  7. QVERIFY(data == out);
  8. // change the first character to upper case
  9. QVERIFY(QString("A") == out[0].toUpper());

这里我们将展示如何将一个字符串转换为数字,将一个数字转换为字符串。也有一些方便的函数用于float或者double和其它类型的转换。只需要在Qt帮助文档中就可以找到这些使用方法。

  1. // create some variables
  2. int v = 10;
  3. int base = 10;
  4. // convert an int to a string
  5. QString a = QString::number(v, base);
  6. // and back using and sets ok to true on success
  7. bool ok(false);
  8. int v2 = a.toInt(&ok, base);
  9. // verify our results
  10. QVERIFY(ok == true);
  11. QVERIFY(v = v2);

通常你需要参数化文本。例如使用QString("Hello" + name)
,一个更加灵活的方法是使用arg标记目标,这样即使在翻译时也可以保证目标的变化。

  1. // create a name
  2. QString name("Joe");
  3. // get the day of the week as string
  4. QString weekday = QDate::currentDate().toString("dddd");
  5. // format a text using paramters (%1, %2)
  6. QString hello = QString("Hello %1. Today is %2.").arg(name).arg(weekday);
  7. // This worked on Monday. Promise!
  8. if(Qt::Monday == QDate::currentDate().dayOfWeek()) {
  9. QCOMPARE(QString("Hello Joe. Today is Monday."), hello);
  10. } else {
  11. QVERIFY(QString("Hello Joe. Today is Monday.") != hello);
  12. }

有时你需要在你的代码中直接使用unicode字符。你需要记住如何在使用QCharQString类来标记它们。

  1. // Create a unicode character using the unicode for smile :-)
  2. QChar smile(0x263A);
  3. // you should see a :-) on you console
  4. qDebug() << smile;
  5. // Use a unicode in a string
  6. QChar smile2 = QString("\u263A").at(0);
  7. QVERIFY(smile == smile2);
  8. // Create 12 smiles in a vector
  9. QVector<QChar> smilies(12);
  10. smilies.fill(smile);
  11. // Can you see the smiles
  12. qDebug() << smilies;

上面这些示例展示了在Qt中如何轻松的处理unicode文本。对于非unicode文本,QByteArray类同样有很多方便的函数可以使用。阅读Qt帮助文档中QString部分,它有一些很好的示例。