原文: http://zetcode.com/gui/qt4/utilityclasses/

在 Qt4 C++ 编程教程的这一部分中,我们将讨论 Qt4 库中可用的工具类。

Qt4 库由一大堆帮助程序类组成,它们可以帮助程序员完成工作。 这些包括用于处理字符串,文件,XML 文件,流,数据库或网络的类。 在这里,我们只显示了整个湖面的一小滴。

Qt4 库可用于创建控制台和 GUI 应用。 在本章中,我们将说明基于控制台的应用中的一些帮助程序类。

将文本打印到控制台

这是一个简单的控制台应用。 该应用将一些文本放入控制台窗口。

console.cpp

  1. #include <iostream>
  2. int main() {
  3. std::cout << "console application\n";
  4. }

在第一个示例中,我们使用 STL(标准模板库)库打印文本。

console2.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QTextStream out(stdout);
  4. out << "console application\n";
  5. }

第二个示例显示了如何使用 Qt4 编程库打印文本。

Output

  1. $ ./console
  2. console application

QFile

QFile是用于读取和写入文件的类。

在第一个示例中,我们将一行写入文件中。

write_line.cpp

  1. #include <QTextStream>
  2. #include <QFile>
  3. int main() {
  4. QFile data("myfile");
  5. if (data.open(QFile::WriteOnly)) {
  6. QTextStream out(&data);
  7. out << "You make me want to be a better man." << endl;
  8. }
  9. }

在只写模式下创建名为myfile的文件。 QTextStream类用于在文件中插入一行。

Output

  1. $ cat myfile
  2. You make me want to be a better man.

下一个示例将文件的内容打印到控制台。 文本将使用匈牙利语,因此我们必须设置正确的编解码器。

szerelem

  1. S a régi szeretőmér­
  2. mit nem cselekednék,
  3. tengerből a vizet
  4. kanállal lemerném.
  5. S a tenger fenekéről
  6. apró gyöngyöt szednék,
  7. s a régi szeretőmnek
  8. gyöngykoszorút kötnék.

这些是szerelem文件的内容。

szerelem.cpp

  1. #include <QTextStream>
  2. #include <QFile>
  3. int main() {
  4. QFile data("szerelem");
  5. QString line;
  6. if (data.open(QFile::ReadOnly)) {
  7. QTextStream in(&data);
  8. QTextStream out(stdout);
  9. out.setCodec("UTF-8");
  10. in.setCodec("UTF-8");
  11. do {
  12. line = in.readLine();
  13. out << line << endl;
  14. } while (!line.isNull());
  15. }
  16. }

该示例以只读模式打开文件,并逐行打印其内容。

  1. out.setCodec("UTF-8");
  2. in.setCodec("UTF-8");

由于匈牙利语言包含基本 Latin1 字符集以外的字符,因此我们将编解码器设置为 UTF-8,它能够显示所有可能的字符。

  1. do {
  2. line = in.readLine();
  3. out << line << endl;
  4. } while (!line.isNull());

在此循环中,我们逐行读取和打印文件的内容。 readLine()方法从流中读取下一行。 如果流已读取到文件末尾,则readLine()将返回空QString

Output

  1. $ ./szerelem
  2. S a régi szeretőmér­
  3. mit nem cselekednék,
  4. tengerből a vizet
  5. kanállal lemerném.
  6. S a tenger fenekéről
  7. apró gyöngyöt szednék,
  8. s a régi szeretőmnek
  9. gyöngykoszorút kötnék.

QList

QList是通用 Qt4 的容器之一。 它用于存储值列表,并提供基于索引的快速访问以及快速插入和删除。

mlist.cpp

  1. #include <QTextStream>
  2. #include <QList>
  3. int main() {
  4. QTextStream out(stdout);
  5. QList<QString> list;
  6. list << "Balzac" << "Tolstoy" << "Guldbrassen"
  7. << "London" << "Galsworthy" << "Sienkiewicz";
  8. qSort(list);
  9. for (int i = 0; i < list.size(); ++i) {
  10. out << list.at(i) << endl;
  11. }
  12. }

在代码示例中,我们创建了一个伟大的小说家列表。 我们按字母顺序对列表进行排序,然后将其打印到控制台。

Output

  1. $ ./mlist
  2. Balzac
  3. Galsworthy
  4. Guldbrassen
  5. London
  6. Sienkiewicz
  7. Tolstoy

QDir

QDir类提供对目录结构及其内容的访问。

home_dir.cpp

  1. #include <QTextStream>
  2. #include <QDir>
  3. int main() {
  4. QTextStream out(stdout);
  5. QString home = QDir::homePath();
  6. out << home << endl;
  7. }

本示例确定主目录并将其打印到控制台。

Output

  1. $ ./home_dir
  2. /home/janbodnar

在下面的示例中,我们使用QDir

filters.cpp

  1. #include <QTextStream>
  2. #include <QDir>
  3. int main() {
  4. QTextStream out(stdout);
  5. QDir dir;
  6. QStringList filters;
  7. filters << "*.c" << "*.c~";
  8. dir.setNameFilters(filters);
  9. QFileInfoList list = dir.entryInfoList();
  10. for (int i=0; i<list.size(); ++i) {
  11. QFileInfo fileInfo = list.at(i);
  12. out << QString("%1").arg(fileInfo.fileName());
  13. out << endl;
  14. }
  15. }

该代码示例确定当前目录中的所有文件,并对文件应用特定的过滤器。

Output

  1. $ ls -F
  2. anim* anim.c anim.c~ filters* sun.png
  3. $ ./filters
  4. anim.c
  5. anim.c~

QTime

QTime类提供时钟时间功能。

在以下示例中,我们将当前本地时间打印到控制台。

local_time.cpp

  1. #include <QTextStream>
  2. #include <QTime>
  3. int main() {
  4. QTextStream out(stdout);
  5. QTime qtime = QTime::currentTime();
  6. QString stime = qtime.toString(Qt::LocalDate);
  7. out << stime << endl;
  8. }

请注意,不得将文件命名为time.cpp

Output

  1. $ ./local_time
  2. 10:30:33 PM

QString

QString类用于处理字符串。 这可能是 Qt4 编程库中可用的最重要的工具类。

concat.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QString a = "Disziplin ";
  4. QString b = "ist ";
  5. QString c = "Macht.\n";
  6. QTextStream out(stdout);
  7. out << a + b + c;
  8. }

第一个示例连接三个字符串。

Output

  1. $ ./concat
  2. Disziplin ist Macht.

第二个示例通过一个接一个的附加文本来构建字符串。

append.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QString string = "Whether I shall ";
  4. string.append("turn out to be the hero of my own life, \n");
  5. string.append("or whether that station will be held by anybody else, \n");
  6. string.append("these pages must show.\n");
  7. QTextStream out(stdout);
  8. out << string;
  9. }

QStringappend()方法将给定字符串附加到该字符串的末尾。

Output

  1. $ ./append
  2. Whether I shall turn out to be the hero of my own life,
  3. or whether that station will be held by anybody else,
  4. these pages must show.

下一个示例显示了参数替换。

arg.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QString string = "What if I gave you %1 red roses?";
  4. int num = 21;
  5. QTextStream out(stdout);
  6. out << string.arg(num) << endl;
  7. }

arg()方法返回字符串的副本,在该字符串中,它用提供的整数值替换%1标记。

Output

  1. $ ./arg
  2. What if I gave you 21 red roses?

以下示例显示了如何确定字符串的大小。

size.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QString string = "The history of my life.";
  4. QTextStream out(stdout);
  5. out << "The string has " + QString::number(string.size())
  6. + " characters." << endl;
  7. }

size()方法返回此字符串中的字符数。 为了将数字与前面的字符串连接起来,我们使用number()方法,该方法返回与给定数字等效的字符串。

Output

  1. $ ./size
  2. The string has 23 characters.

最后一个示例是关于使字符串大写或小写。

uplow.cpp

  1. #include <QTextStream>
  2. int main() {
  3. QString string = "The history of my life.";
  4. QTextStream out(stdout);
  5. out << string.toLower() << endl;
  6. out << string.toUpper() << endl;
  7. }

toLower()方法返回字符串的小写副本,toUpper()方法返回字符串的大写副本。

Output

  1. $ ./uplow
  2. the history of my life.
  3. THE HISTORY OF MY LIFE.

在本章中,我们描述了 Qt4 中的一些工具类。