多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Qt4 工具类 > 原文: [http://zetcode.com/gui/qt4/utilityclasses/](http://zetcode.com/gui/qt4/utilityclasses/) 在 Qt4 C++ 编程教程的这一部分中,我们将讨论 Qt4 库中可用的工具类。 Qt4 库由一大堆帮助程序类组成,它们可以帮助程序员完成工作。 这些包括用于处理字符串,文件,XML 文件,流,数据库或网络的类。 在这里,我们只显示了整个湖面的一小滴。 Qt4 库可用于创建控制台和 GUI 应用。 在本章中,我们将说明基于控制台的应用中的一些帮助程序类。 ## 将文本打印到控制台 这是一个简单的控制台应用。 该应用将一些文本放入控制台窗口。 `console.cpp` ```cpp #include <iostream> int main() { std::cout << "console application\n"; } ``` 在第一个示例中,我们使用 STL(标准模板库)库打印文本。 `console2.cpp` ```cpp #include <QTextStream> int main() { QTextStream out(stdout); out << "console application\n"; } ``` 第二个示例显示了如何使用 Qt4 编程库打印文本。 `Output` ```cpp $ ./console console application ``` ## `QFile` `QFile`是用于读取和写入文件的类。 在第一个示例中,我们将一行写入文件中。 `write_line.cpp` ```cpp #include <QTextStream> #include <QFile> int main() { QFile data("myfile"); if (data.open(QFile::WriteOnly)) { QTextStream out(&data); out << "You make me want to be a better man." << endl; } } ``` 在只写模式下创建名为`myfile`的文件。 `QTextStream`类用于在文件中插入一行。 `Output` ```cpp $ cat myfile You make me want to be a better man. ``` 下一个示例将文件的内容打印到控制台。 文本将使用匈牙利语,因此我们必须设置正确的编解码器。 `szerelem` ```cpp S a régi szeretőmér­ mit nem cselekednék, tengerből a vizet kanállal lemerném. S a tenger fenekéről apró gyöngyöt szednék, s a régi szeretőmnek gyöngykoszorút kötnék. ``` 这些是`szerelem`文件的内容。 `szerelem.cpp` ```cpp #include <QTextStream> #include <QFile> int main() { QFile data("szerelem"); QString line; if (data.open(QFile::ReadOnly)) { QTextStream in(&data); QTextStream out(stdout); out.setCodec("UTF-8"); in.setCodec("UTF-8"); do { line = in.readLine(); out << line << endl; } while (!line.isNull()); } } ``` 该示例以只读模式打开文件,并逐行打印其内容。 ```cpp out.setCodec("UTF-8"); in.setCodec("UTF-8"); ``` 由于匈牙利语言包含基本 Latin1 字符集以外的字符,因此我们将编解码器设置为 UTF-8,它能够显示所有可能的字符。 ```cpp do { line = in.readLine(); out << line << endl; } while (!line.isNull()); ``` 在此循环中,我们逐行读取和打印文件的内容。 `readLine()`方法从流中读取下一行。 如果流已读取到文件末尾,则`readLine()`将返回空`QString`。 `Output` ```cpp $ ./szerelem S a régi szeretőmér­ mit nem cselekednék, tengerből a vizet kanállal lemerném. S a tenger fenekéről apró gyöngyöt szednék, s a régi szeretőmnek gyöngykoszorút kötnék. ``` ## `QList` `QList`是通用 Qt4 的容器之一。 它用于存储值列表,并提供基于索引的快速访问以及快速插入和删除。 `mlist.cpp` ```cpp #include <QTextStream> #include <QList> int main() { QTextStream out(stdout); QList<QString> list; list << "Balzac" << "Tolstoy" << "Guldbrassen" << "London" << "Galsworthy" << "Sienkiewicz"; qSort(list); for (int i = 0; i < list.size(); ++i) { out << list.at(i) << endl; } } ``` 在代码示例中,我们创建了一个伟大的小说家列表。 我们按字母顺序对列表进行排序,然后将其打印到控制台。 `Output` ```cpp $ ./mlist Balzac Galsworthy Guldbrassen London Sienkiewicz Tolstoy ``` ## `QDir` `QDir`类提供对目录结构及其内容的访问。 `home_dir.cpp` ```cpp #include <QTextStream> #include <QDir> int main() { QTextStream out(stdout); QString home = QDir::homePath(); out << home << endl; } ``` 本示例确定主目录并将其打印到控制台。 `Output` ```cpp $ ./home_dir /home/janbodnar ``` 在下面的示例中,我们使用`QDir`类 `filters.cpp` ```cpp #include <QTextStream> #include <QDir> int main() { QTextStream out(stdout); QDir dir; QStringList filters; filters << "*.c" << "*.c~"; dir.setNameFilters(filters); QFileInfoList list = dir.entryInfoList(); for (int i=0; i<list.size(); ++i) { QFileInfo fileInfo = list.at(i); out << QString("%1").arg(fileInfo.fileName()); out << endl; } } ``` 该代码示例确定当前目录中的所有文件,并对文件应用特定的过滤器。 `Output` ```cpp $ ls -F anim* anim.c anim.c~ filters* sun.png $ ./filters anim.c anim.c~ ``` ## `QTime` `QTime`类提供时钟时间功能。 在以下示例中,我们将当前本地时间打印到控制台。 `local_time.cpp` ```cpp #include <QTextStream> #include <QTime> int main() { QTextStream out(stdout); QTime qtime = QTime::currentTime(); QString stime = qtime.toString(Qt::LocalDate); out << stime << endl; } ``` 请注意,不得将文件命名为`time.cpp`。 `Output` ```cpp $ ./local_time 10:30:33 PM ``` ## `QString` `QString`类用于处理字符串。 这可能是 Qt4 编程库中可用的最重要的工具类。 `concat.cpp` ```cpp #include <QTextStream> int main() { QString a = "Disziplin "; QString b = "ist "; QString c = "Macht.\n"; QTextStream out(stdout); out << a + b + c; } ``` 第一个示例连接三个字符串。 `Output` ```cpp $ ./concat Disziplin ist Macht. ``` 第二个示例通过一个接一个的附加文本来构建字符串。 `append.cpp` ```cpp #include <QTextStream> int main() { QString string = "Whether I shall "; string.append("turn out to be the hero of my own life, \n"); string.append("or whether that station will be held by anybody else, \n"); string.append("these pages must show.\n"); QTextStream out(stdout); out << string; } ``` `QString`的`append()`方法将给定字符串附加到该字符串的末尾。 `Output` ```cpp $ ./append Whether I shall turn out to be the hero of my own life, or whether that station will be held by anybody else, these pages must show. ``` 下一个示例显示了参数替换。 `arg.cpp` ```cpp #include <QTextStream> int main() { QString string = "What if I gave you %1 red roses?"; int num = 21; QTextStream out(stdout); out << string.arg(num) << endl; } ``` `arg()`方法返回字符串的副本,在该字符串中,它用提供的整数值替换`%1`标记。 `Output` ```cpp $ ./arg What if I gave you 21 red roses? ``` 以下示例显示了如何确定字符串的大小。 `size.cpp` ```cpp #include <QTextStream> int main() { QString string = "The history of my life."; QTextStream out(stdout); out << "The string has " + QString::number(string.size()) + " characters." << endl; } ``` `size()`方法返回此字符串中的字符数。 为了将数字与前面的字符串连接起来,我们使用`number()`方法,该方法返回与给定数字等效的字符串。 `Output` ```cpp $ ./size The string has 23 characters. ``` 最后一个示例是关于使字符串大写或小写。 `uplow.cpp` ```cpp #include <QTextStream> int main() { QString string = "The history of my life."; QTextStream out(stdout); out << string.toLower() << endl; out << string.toUpper() << endl; } ``` `toLower()`方法返回字符串的小写副本,`toUpper()`方法返回字符串的大写副本。 `Output` ```cpp $ ./uplow the history of my life. THE HISTORY OF MY LIFE. ``` 在本章中,我们描述了 Qt4 中的一些工具类。