Qt4 实用工具类
最后修改于 2023 年 10 月 18 日
在本 Qt4 C++ 编程教程中,我们将讨论 Qt4 库中可用的实用工具类。
Qt4 库包含大量辅助类,可帮助程序员完成工作。这些包括用于处理字符串、文件、XML 文件、流、数据库或网络的类。这里我们只展示了整个湖泊中的一小部分。
Qt4 库可用于创建控制台和 GUI 应用程序。在本章中,我们将通过基于控制台的应用程序来说明一些辅助类。
将文本打印到控制台
这是一个简单的控制台应用程序。该应用程序将一些文本放入控制台窗口。
#include <iostream> int main() { std::cout << "console application\n"; }
在第一个例子中,我们使用 STL(标准模板库)库打印文本。
#include <QTextStream> int main() { QTextStream out(stdout); out << "console application\n"; }
第二个例子展示了如何使用 Qt4 编程库打印文本。
$ ./console console application
QFile
QFile
是一个用于从文件读取和写入文件的类。
在第一个例子中,我们向文件中写入一行。
#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
类将一行插入到文件中。
$ cat myfile You make me want to be a better man.
下一个例子将文件的内容打印到控制台。文本将使用匈牙利语,因此我们必须设置正确的编解码器。
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 文件的内容。
#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
将返回一个 null QString
。
$ ./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 的通用容器之一。它用于存储值列表,并提供基于索引的快速访问以及快速插入和删除。
#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; } }
在代码示例中,我们创建了一个伟大小说家的列表。我们按字母顺序对列表进行排序并将其打印到控制台。
$ ./mlist Balzac Galsworthy Guldbrassen London Sienkiewicz Tolstoy
QDir
QDir
类提供对目录结构及其内容的访问。
#include <QTextStream> #include <QDir> int main() { QTextStream out(stdout); QString home = QDir::homePath(); out << home << endl; }
此示例确定主目录并将其打印到控制台。
$ ./home_dir /home/janbodnar
在下面的例子中,我们使用 QDir
类
#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; } }
代码示例确定当前目录中的所有文件,并对文件应用特定过滤器。
$ ls -F anim* anim.c anim.c~ filters* sun.png $ ./filters anim.c anim.c~
QTime
QTime
类提供时钟时间功能。
在下面的例子中,我们将当前本地时间打印到控制台。
#include <QTextStream> #include <QTime> int main() { QTextStream out(stdout); QTime qtime = QTime::currentTime(); QString stime = qtime.toString(Qt::LocalDate); out << stime << endl; }
注意,该文件不能命名为 time.cpp
。
$ ./local_time 10:30:33 PM
QString
QString
类用于处理字符串。这可能是 Qt4 编程库中最重要的一个实用工具类。
#include <QTextStream> int main() { QString a = "Disziplin "; QString b = "ist "; QString c = "Macht.\n"; QTextStream out(stdout); out << a + b + c; }
第一个例子连接了三个字符串。
$ ./concat Disziplin ist Macht.
第二个例子通过一个接一个地附加文本来构建字符串。
#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
方法将给定的字符串附加到此字符串的末尾。
$ ./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.
下一个例子显示了参数替换。
#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
标记替换为提供的整数值。
$ ./arg What if I gave you 21 red roses?
以下示例展示了如何确定字符串的大小。
#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
方法,该方法返回给定数字的字符串等效项。
$ ./size The string has 23 characters.
最后一个例子是关于将字符串转换为大写或小写。
#include <QTextStream> int main() { QString string = "The history of my life."; QTextStream out(stdout); out << string.toLower() << endl; out << string.toUpper() << endl; }
toLower
方法返回字符串的小写副本,而 toUpper
方法返回字符串的大写副本。
$ ./uplow the history of my life. THE HISTORY OF MY LIFE.
在本章中,我们描述了 Qt4 中的一些实用工具类。