在 Qt4 C++ 编程教程的这一部分中,我们将讨论 Qt4 库中可用的工具类。
Qt4 库由一大堆帮助程序类组成,它们可以帮助程序员完成工作。 这些包括用于处理字符串,文件,XML 文件,流,数据库或网络的类。 在这里,我们只显示了整个湖面的一小滴。
Qt4 库可用于创建控制台和 GUI 应用。 在本章中,我们将说明基于控制台的应用中的一些帮助程序类。
将文本打印到控制台
这是一个简单的控制台应用。 该应用将一些文本放入控制台窗口。
console.cpp
#include <iostream>int main() {std::cout << "console application\n";}
在第一个示例中,我们使用 STL(标准模板库)库打印文本。
console2.cpp
#include <QTextStream>int main() {QTextStream out(stdout);out << "console application\n";}
第二个示例显示了如何使用 Qt4 编程库打印文本。
Output
$ ./consoleconsole application
QFile
QFile是用于读取和写入文件的类。
在第一个示例中,我们将一行写入文件中。
write_line.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
$ cat myfileYou make me want to be a better man.
下一个示例将文件的内容打印到控制台。 文本将使用匈牙利语,因此我们必须设置正确的编解码器。
szerelem
S a régi szeretőmérmit nem cselekednék,tengerből a vizetkanállal lemerném.S a tenger fenekérőlapró gyöngyöt szednék,s a régi szeretőmnekgyöngykoszorút kötnék.
这些是szerelem文件的内容。
szerelem.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());}}
该示例以只读模式打开文件,并逐行打印其内容。
out.setCodec("UTF-8");in.setCodec("UTF-8");
由于匈牙利语言包含基本 Latin1 字符集以外的字符,因此我们将编解码器设置为 UTF-8,它能够显示所有可能的字符。
do {line = in.readLine();out << line << endl;} while (!line.isNull());
在此循环中,我们逐行读取和打印文件的内容。 readLine()方法从流中读取下一行。 如果流已读取到文件末尾,则readLine()将返回空QString。
Output
$ ./szerelemS a régi szeretőmérmit nem cselekednék,tengerből a vizetkanállal lemerném.S a tenger fenekérőlapró gyöngyöt szednék,s a régi szeretőmnekgyöngykoszorút kötnék.
QList
QList是通用 Qt4 的容器之一。 它用于存储值列表,并提供基于索引的快速访问以及快速插入和删除。
mlist.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
$ ./mlistBalzacGalsworthyGuldbrassenLondonSienkiewiczTolstoy
QDir
QDir类提供对目录结构及其内容的访问。
home_dir.cpp
#include <QTextStream>#include <QDir>int main() {QTextStream out(stdout);QString home = QDir::homePath();out << home << endl;}
本示例确定主目录并将其打印到控制台。
Output
$ ./home_dir/home/janbodnar
在下面的示例中,我们使用QDir类
filters.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
$ ls -Fanim* anim.c anim.c~ filters* sun.png$ ./filtersanim.canim.c~
QTime
QTime类提供时钟时间功能。
在以下示例中,我们将当前本地时间打印到控制台。
local_time.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
$ ./local_time10:30:33 PM
QString
QString类用于处理字符串。 这可能是 Qt4 编程库中可用的最重要的工具类。
concat.cpp
#include <QTextStream>int main() {QString a = "Disziplin ";QString b = "ist ";QString c = "Macht.\n";QTextStream out(stdout);out << a + b + c;}
第一个示例连接三个字符串。
Output
$ ./concatDisziplin ist Macht.
第二个示例通过一个接一个的附加文本来构建字符串。
append.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
$ ./appendWhether 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
#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
$ ./argWhat if I gave you 21 red roses?
以下示例显示了如何确定字符串的大小。
size.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
$ ./sizeThe string has 23 characters.
最后一个示例是关于使字符串大写或小写。
uplow.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
$ ./uplowthe history of my life.THE HISTORY OF MY LIFE.
在本章中,我们描述了 Qt4 中的一些工具类。
