Qt4 工具类
在 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
$ ./console
console 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 myfile
You make me want to be a better man.
下一个示例将文件的内容打印到控制台。 文本将使用匈牙利语,因此我们必须设置正确的编解码器。
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.
这些是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
$ ./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
#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
$ ./mlist
Balzac
Galsworthy
Guldbrassen
London
Sienkiewicz
Tolstoy
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 -F
anim* anim.c anim.c~ filters* sun.png
$ ./filters
anim.c
anim.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_time
10: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
$ ./concat
Disziplin 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
$ ./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
#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
$ ./arg
What 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
$ ./size
The 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
$ ./uplow
the history of my life.
THE HISTORY OF MY LIFE.
在本章中,我们描述了 Qt4 中的一些工具类。