提交 aa3fb417 编写于 作者: W wizardforcel

2020-06-20 17:23:28

上级 c515881a
......@@ -8,7 +8,7 @@ PyQt4 具有丰富的小部件集。 但是,没有工具包可以提供程序
## 刻录小部件
这是一个小部件,我们可以在 Nero,K3B 或其他 CD / DVD 刻录软件中看到。
这是一个小部件,我们可以在 Nero,K3B 或其他 CD/DVD 刻录软件中看到。
```
#!/usr/bin/python
......
......@@ -446,10 +446,10 @@ The time is 4:14 PM
| 表达式 | 输出量 |
| --- | --- |
| `h` | 没有前导零的小时(如果显示 AM / PM,则为 0 到 23 或 1 到 12) |
| `hh` | 带前导零的小时(如果显示 AM / PM,则为 00 到 23 或 01 到 12) |
| `H` | 没有前导零的小时(0 到 23,即使有 AM / PM 显示) |
| `HH` | 带前导零的小时(00 到 23,即使有 AM / PM 显示) |
| `h` | 没有前导零的小时(如果显示 AM/PM,则为 0 到 23 或 1 到 12) |
| `hh` | 带前导零的小时(如果显示 AM/PM,则为 00 到 23 或 01 到 12) |
| `H` | 没有前导零的小时(0 到 23,即使有 AM/PM 显示) |
| `HH` | 带前导零的小时(00 到 23,即使有 AM/PM 显示) |
| `m` | 没有前导零(0 到 59)的分钟 |
| `mm` | 分钟,前导零(00 到 59) |
| `s` | 秒,不带前导零(0 到 59) |
......@@ -498,7 +498,7 @@ out << "The time is " << ct.toString("h:m:s a") << endl;
```
此时间格式说明符使用小时,分钟和秒(不带前导零),并添加 am / pm 周期标识符。
此时间格式说明符使用小时,分钟和秒(不带前导零),并添加 AM/PM 周期标识符。
`Output`
......@@ -990,7 +990,7 @@ Local datetime: Wed Oct 14 17:50:30 2015
## Unix 纪元
纪元是选择作为特定纪元起源的时间瞬间。 例如,在西方基督教国家,时间从耶稣出生的第 0 天开始。 另一个例子是法国共和党日历,使用了十二年。 这个时期是 1792 年 9 月 22 日宣布的共和纪元的开始,即宣布成立第一共和国并废除君主制的那一天。 电脑也有自己的纪元。 最受欢迎的时间之一是 Unix 时间。 Unix 纪元是 1970 年 1 月 1 日 UTC 时间 00:00:00(或 1970-01-01T00:00:00Z ISO 8601)。 计算机中的日期和时间是根据自该计算机或平台的定义时期以来经过的秒数或时钟滴答数确定的。
纪元是选择作为特定纪元起源的时间瞬间。 例如,在西方基督教国家,时间从耶稣出生的第 0 天开始。 另一个例子是法国共和党日历,使用了十二年。 这个时期是 1792 年 9 月 22 日宣布的共和纪元的开始,即宣布成立第一共和国并废除君主制的那一天。 电脑也有自己的纪元。 最受欢迎的时间之一是 Unix 时间。 Unix 纪元是 1970 年 1 月 1 日 UTC 时间 00:00:00(或 1970-01-01T00:00:00Z ISO 8601)。 计算机中的日期和时间是根据自该计算机或平台的定义时期以来经过的秒数或时钟滴答数确定的。
```
$ date +%s
......
......@@ -8,7 +8,7 @@ PySide 在各种小部件上都很丰富。 没有工具包可以提供程序员
## 刻录小部件
这是一个小部件,我们可以在 Nero,K3B 或其他 CD / DVD 刻录软件中看到。 我们完全从头开始创建小部件。 它基于最小的`QtGui.QWidget`小部件。
这是一个小部件,我们可以在 Nero,K3B 或其他 CD/DVD 刻录软件中看到。 我们完全从头开始创建小部件。 它基于最小的`QtGui.QWidget`小部件。
```
#!/usr/bin/python
......
......@@ -8,7 +8,7 @@ PyQt5 具有丰富的小部件集。 但是,没有工具包可以提供程序
## 刻录小部件
这是一个小部件,我们可以在 Nero,K3B 或其他 CD / DVD 刻录软件中看到。
这是一个小部件,我们可以在 Nero,K3B 或其他 CD/DVD 刻录软件中看到。
`customwidget.py`
......@@ -155,7 +155,7 @@ if __name__ == '__main__':
```
在我们的示例中,我们有一个`QSlider`和一个自定义小部件。 滑块控制自定义窗口小部件。 此小部件以图形方式显示了介质的总容量和可供我们使用的可用空间。 我们的自定义窗口小部件的最小值是 1,最大值是 OVER_CAPACITY。 如果达到值 MAX_CAPACITY,我们将开始绘制红色。 这通常表示过度燃烧。
在我们的示例中,我们有一个`QSlider`和一个自定义小部件。 滑块控制自定义窗口小部件。 此小部件以图形方式显示了介质的总容量和可供我们使用的可用空间。 我们的自定义窗口小部件的最小值是 1,最大值是`OVER_CAPACITY`。 如果达到值`MAX_CAPACITY`,我们将开始绘制红色。 这通常表示过度燃烧。
刻录小部件位于窗口的底部。 这可以通过使用一个`QHBoxLayout`和一个`QVBoxLayout`来实现。
......
......@@ -6,7 +6,7 @@
## 俄罗斯方块
俄罗斯方块游戏是有史以来最受欢迎的计算机游戏之一。 原始游戏是由俄罗斯程序员 Alexey Pajitnov 于 1985 年设计和编程的。此后,几乎所有版本的几乎所有计算机平台上都可以使用 Tetris
俄罗斯方块游戏是有史以来最受欢迎的计算机游戏之一。 原始游戏是由俄罗斯程序员 Alexey Pajitnov 于 1985 年设计和编程的。此后,几乎所有版本的几乎所有计算机平台上都可以使用俄罗斯方块
俄罗斯方块被称为下降块益智游戏。 在这个游戏中,我们有七个不同的形状,称为 tetrominoes:S 形,Z 形,T 形,L 形,线形,MirroredL 形和 正方形。 这些形状中的每一个都形成有四个正方形。 形状从板上掉下来。 俄罗斯方块游戏的目的是移动和旋转形状,以使其尽可能地适合。 如果我们设法形成一行,则该行将被破坏并得分。 我们玩俄罗斯方块游戏,直到达到顶峰。
......@@ -539,7 +539,7 @@ self.tboard.msg2Statusbar[str].connect(self.statusbar.showMessage)
```
我们创建一个状态栏,在其中显示消息。 我们将显示三种可能的消息:已删除的行数,暂停的消息或游戏结束消息。 `msg2Statusbar`是在 Board 类中实现的自定义信号。 `showMessage()`是一种内置方法,可在状态栏上显示一条消息。
我们创建一个状态栏,在其中显示消息。 我们将显示三种可能的消息:已删除的行数,暂停的消息或游戏结束消息。 `msg2Statusbar`是在`Board`类中实现的自定义信号。 `showMessage()`是一种内置方法,可在状态栏上显示一条消息。
```py
self.tboard.start()
......@@ -846,7 +846,7 @@ self.coords = [[0,0] for i in range(4)]
Figure: Coordinates
上面的图片将帮助您更多地了解坐标值。 例如,元组(0,-1),(0、0),(-1、0),(-1,-1)表示 Z 形。 该图说明了形状。
上面的图片将帮助您更多地了解坐标值。 例如,元组(0,-1),(0,0),(-1,0),(-1,-1)表示 Z 形。 该图说明了形状。
```py
def rotateLeft(self):
......
......@@ -2,7 +2,7 @@
> 原文: [http://zetcode.com/gui/qt5/](http://zetcode.com/gui/qt5/)
这是 Qt5 教程。 在本教程中,您将学习使用 Qt5 和 C++ 进行 GUI 编程的基础。 Qt5 教程适合初学者和中级程序员。 这两个游戏的图像可以在中下移[。 请注意,本教程使用 C++ 11 的功能。](/img/gui/qt5/images.zip)
这是 Qt5 教程。 在本教程中,您将学习使用 Qt5 和 C++ 进行 GUI 编程的基础。 Qt5 教程适合初学者和中级程序员。 这两个游戏的图像可以在中下移[请注意,本教程使用 C++ 11 的功能。](/img/gui/qt5/images.zip)
## 目录
......
......@@ -4,7 +4,7 @@
在 Qt5 教程的这一部分中,我们将介绍 Qt5 库。 我们将安装 Qt5 库并创建我们的第一个小型 Qt5 应用。
Qt 最初是由挪威软件公司 Trolltech 开发的。 2008 年,该公司被诺基亚收购。 2012 年 8 月,一家芬兰开发公司 Digia 从诺基亚那里收购了 Qt 软件技术。 同时,创建了一个 Qt 项目,其中开源 Qt 的开发继续进行。 开源 Qt 工具包的网站可以在 [qt.io](http://www.qt.io) 中找到。 目前,由 Digia 的子公司 Qt Company 和开放源代码治理下的 Qt 项目(包括个人开发人员和公司)共同开发 Qt。
Qt 最初是由挪威软件公司 Trolltech 开发的。 2008 年,该公司被诺基亚收购。 2012 年 8 月,一家芬兰开发公司 Digia 从诺基亚那里收购了 Qt 软件技术。 同时,创建了一个 Qt 项目,其中开源 Qt 的开发继续进行。 开源 Qt 工具包的网站可以在 [qt.io](http://www.qt.io) 中找到。 目前,由 Digia 的子公司 Qt 公司和开放源代码治理下的 Qt 项目(包括个人开发人员和公司)共同开发 Qt。
## Qt
......
......@@ -4,7 +4,7 @@
在本章中,我们将使用字符串。 Qt5 具有用于处理字符串的`QString`类。 它非常强大,并且具有多种方法。
`QString`类提供 Unicode 字符串。 它将字符串存储为 16 位 QChars。 每个`QChar`对应一个 Unicode 4.0 字符。 与许多其他编程语言中的字符串不同,可以修改`QString`
`QString`类提供 Unicode 字符串。 它将字符串存储为 16 位`QChars`。 每个`QChar`对应一个 Unicode 4.0 字符。 与许多其他编程语言中的字符串不同,可以修改`QString`
在本章的示例中,我们将不需要 Qt GUI 模块。 我们将创建命令行程序。 由于默认情况下包括 Qt GUI,因此我们可以通过在项目文件中添加`QT -= gui`声明来禁用它。
......@@ -78,7 +78,7 @@ out << a.toLower() << endl;
这两个方法返回字符串的大写和小写副本。 他们不修改字符串,而是返回新的修改后的字符串副本。
Output
输出:
```cpp
$ ./basic
......@@ -125,7 +125,7 @@ int main(void) {
```
我们介绍了五种初始化 QString 的方法。
我们介绍了五种初始化`QString`的方法。
```cpp
QString str1 = "The night train";
......@@ -163,9 +163,9 @@ QString str5(s3);
```
这是一个 C 字符串; 它是一个字符数组。 `QString`构造函数之一可以将 char 数组作为参数。
这是一个 C 字符串; 它是一个字符数组。 `QString`构造函数之一可以将`char`数组作为参数。
Output
输出:
```cpp
$ ./init
......@@ -230,9 +230,9 @@ if (a.at(5).isNull()) {
```
如果我们尝试访问字符串字符范围之外的字符,则`at()`方法返回 null
如果我们尝试访问字符串字符范围之外的字符,则`at()`方法返回`null`
Output
输出:
```cpp
$ ./access
......@@ -288,7 +288,7 @@ QString s4 = "орел";
此字符串由俄语字母组成。
Output
输出:
```cpp
$ ./length
......@@ -335,7 +335,7 @@ int main() {
```
将要替换的标记以`%`字符开头。 下一个字符是指定自变量的数字。 一个字符串可以有多个参数。 `arg()`方法已重载,它可以接受整数,长数字,字符和 QChar 等。
将要替换的标记以`%`字符开头。 下一个字符是指定自变量的数字。 一个字符串可以有多个参数。 `arg()`方法已重载,它可以接受整数,长数字,字符和`QChar`等。
```cpp
QString s1 = "There are %1 white roses";
......@@ -373,7 +373,7 @@ out << s3.arg(ln).arg(on) << endl;
我们可以有多个控制字符。 `%1`引用第一个参数,`%2`引用第二个参数。 `arg()`方法在连续的链中调用。
Output
输出:
```cpp
$ ./building
......@@ -443,7 +443,7 @@ QStringRef sub(&str2, 0, 7);
`QStringRef`类是`QString`的只读版本。 在这里,我们创建`str2`字符串一部分的`QStringRef`。 第二个参数是位置,第三个参数是子字符串的长度。
Output
输出:
```cpp
$ ./substrings
......@@ -521,7 +521,7 @@ for (int i = 0; i < str.size(); ++i) {
我们计算字符串的大小,并使用`at()`方法访问字符串元素。
Output
输出:
```cpp
$ ./looping
......@@ -632,7 +632,7 @@ c.chop(1);
`chop()`方法从`c`字符串中删除最后一个字符。 现在`b``c`字符串相等。
Output
输出:
```cpp
$ ./comparing
......@@ -690,7 +690,7 @@ out << s3.setNum(n1) + s4.setNum(n2) << endl;
在这种情况下,`setNum()`方法将整数转换为字符串。 我们连接两个字符串。
Output
输出:
```cpp
$ ./converts
......@@ -701,7 +701,7 @@ $ ./converts
## 字符
字符分为各种类别:数字,字母,空格和标点符号。 每个`QString`都由 QChar 组成。 `QChar`具有`isDigit()``isLetter()``isSpace()``isPunct()`方法来执行作业。
字符分为各种类别:数字,字母,空格和标点符号。 每个`QString`都由`QChar`组成。 `QChar`具有`isDigit()``isLetter()``isSpace()``isPunct()`方法来执行作业。
`letters.cpp`
......@@ -791,7 +791,7 @@ out << QString("There are %1 punctuation characters").arg(puncts) << endl;
使用字符串插值,我们将数字打印到终端。
Output
输出:
```cpp
$ ./letters
......@@ -868,7 +868,7 @@ str.clear();
`clear()`方法清除字符串。
Output
输出:
```cpp
$ ./modify
......@@ -927,7 +927,7 @@ out << field1.rightJustified(width, ' ') << "Robert\n";
`rightJustified()`方法返回具有`width`字符的字符串。 如果字符串较短,则其余部分将使用提供的字符填充。 在我们的情况下,它是一个空格字符。
Output
输出:
```cpp
$ ./right_align
......@@ -940,7 +940,7 @@ Marital status: single
## 转义字符
Qt5 具有`toHtmlEscaped()`方法,该方法将纯文本字符串转换为具有 HTML 元字符&lt;&gt;,&和“ HTML 命名实体的 HTML 字符串”
Qt5 具有`toHtmlEscaped()`方法,该方法将纯文本字符串转换为将 HTML 元字符`<``>``&``"`替换为 HTML 命名实体的 HTML 字符串
```cpp
$ cat cprog.c
......@@ -989,7 +989,7 @@ int main(void) {
该示例读取一个 C 程序,并将元字符替换为其命名的实体。
Output
输出:
```cpp
$ ./html_escape
......
......@@ -69,7 +69,7 @@ out << "The time is " << tm2.toString("hh:mm:ss.zzz") << endl;
我们将`QTime`对象打印到控制台。 我们使用的特定格式还包括毫秒,默认情况下会省略毫秒。
Output
输出:
```cpp
$ ./init
......@@ -128,7 +128,7 @@ out << "Current time is: " << ct.toString() << endl;
我们使用`toString()`方法将日期和时间对象转换为字符串。
Output
输出:
```cpp
$ ./curdatetime
......@@ -188,7 +188,7 @@ if (dt1 < dt2) {
我们使用小于(&lt;)的比较运算符比较日期,并确定其中哪个位于日历的更早位置。
Output
输出:
```cpp
$ ./comparedates
......@@ -200,9 +200,9 @@ Sun Apr 5 2015 comes after Sat Apr 5 2014
## 确定闰年
闰年是包含另一天的年份。 日历中额外一天的原因是天文日历年与日历年之间的差异。 日历年正好是 365 天,而天文学年(地球绕太阳公转的时间)是 365.25 天。 相差 6 个小时,这意味着在四年的时间里,我们一天中都没有。 因为我们希望日历与季节同步,所以每四年将 2 月增加一天。 (有例外。)在公历中,February 年的 2 月有 29 天,而不是通常的 28 天。该年持续 366 天,而不是通常的 365 天。
闰年是包含另一天的年份。 日历中额外一天的原因是天文日历年与日历年之间的差异。 日历年正好是 365 天,而天文学年(地球绕太阳公转的时间)是 365.25 天。 相差 6 个小时,这意味着在四年的时间里,我们一天中都没有。 因为我们希望日历与季节同步,所以每四年将 2 月增加一天。 (有例外。)在公历中,年的 2 月有 29 天,而不是通常的 28 天。该年持续 366 天,而不是通常的 365 天。
`QDate::isLeapYear()`静态方法确定年份是否为 a 年。
`QDate::isLeapYear()`静态方法确定年份是否为年。
`leapyear.cpp`
......@@ -227,14 +227,14 @@ int main() {
```
在示例中,我们有一个年份列表。 我们每年检查是否是 a 年。
在示例中,我们有一个年份列表。 我们每年检查是否是年。
```cpp
QList<int> years({2010, 2011, 2012, 2013, 2014, 2015, 2016});
```
我们初始化一个年份列表。 这是 C++ 11 构造,因此,我们需要启用 C++ 11。 我们需要将`CONFIG += c++11``QMAKE_CXXFLAGS += -std=c++11``QMAKE_CXXFLAGS += -std=c++0x`添加到.pro 文件。
我们初始化一个年份列表。 这是 C++ 11 构造,因此,我们需要启用 C++ 11。 我们需要将`CONFIG += c++11``QMAKE_CXXFLAGS += -std=c++11``QMAKE_CXXFLAGS += -std=c++0x`添加到`.pro`文件。
```cpp
foreach (int year, years) {
......@@ -247,7 +247,7 @@ foreach (int year, years) {
```
我们遍历列表,确定给定的年份是否为 a 年。 `QDate::isLeapYear()`返回布尔值 true 或 false
我们遍历列表,确定给定的年份是否为 a 年。 `QDate::isLeapYear()`返回布尔值`true``false`
`leapyear.pro`
......@@ -270,7 +270,7 @@ QT -= gui
这是项目文件。 我们添加`CONFIG += c++11`声明以启用 C++ 11。 我们用`QT -= gui`禁用了 Qt GUI 模块,因为命令行程序不需要它。
Output
输出:
```cpp
$ ./leapyear
......@@ -321,7 +321,7 @@ out << "Today is " << cd.toString(Qt::ISODate) << endl;
在这里,我们以`Qt::ISODate`格式打印当前日期,这是用于显示日期的国际标准。
Output
输出:
```cpp
$ ./dateformats
......@@ -348,7 +348,7 @@ Today is 10/31/15
| `dddd` | 本地化的长名称(例如,“星期一”到“星期日”)。 使用`QDate::longDayName()`。 |
| `M` | 以不带前导零(1 到 12)的数字表示的月份 |
| `MM` | 月份,以前导零(01 到 12)开头的数字 |
| `MMM` | 本地化月份的缩写名称(例如,“ Jan”到“ Dec”)。 使用`QDate::shortMonthName()`。 |
| `MMM` | 本地化月份的缩写名称(例如,“`Jan`”到“`Dec`”)。 使用`QDate::shortMonthName()`。 |
| `MMMM` | 本地化的长月份名称(例如,“一月”到“十二月”)。 使用`QDate::longMonthName()`。 |
| `y` | 年份为两位数(00 到 99) |
| `yyyy` | 年份为四位数。 如果年份为负数,则还会附加一个减号。 |
......@@ -389,7 +389,7 @@ out << "Today is " << cd.toString("yy/M/dd") << endl;
```
这是另一种常见的日期格式。 零件之间用斜杠(/)字符分隔。 `M`指示符代表一个月,不带前导零(1 到 12)。
这是另一种常见的日期格式。 零件之间用斜杠(`/`)字符分隔。 `M`指示符代表一个月,不带前导零(1 到 12)。
```cpp
out << "Today is " << cd.toString("d. M. yyyy") << endl;
......@@ -398,7 +398,7 @@ out << "Today is " << cd.toString("d. M. yyyy") << endl;
此日期格式在斯洛伐克使用。 零件由点字符分隔。 日和月没有前导零。 首先是日期,然后是月份,最后是年份。
Output
输出:
```cpp
$ ./customdateformats
......@@ -446,7 +446,7 @@ out << "The time is " << ct.toString(Qt::ISODate) << endl;
在这里,我们以`Qt::ISODate`格式打印当前时间,这是用于显示时间的国际标准。
Output
输出:
```cpp
$ ./timeformats
......@@ -467,18 +467,18 @@ The time is 3:58 PM
| 表达式 | 输出量 |
| --- | --- |
| `h` | 没有前导零的小时(如果显示 AM / PM,则为 0 到 23 或 1 到 12) |
| `hh` | 带前导零的小时(如果显示 AM / PM,则为 00 到 23 或 01 到 12) |
| `H` | 没有前导零的小时(0 到 23,即使有 AM / PM 显示) |
| `HH` | 带前导零的小时(00 到 23,即使有 AM / PM 显示) |
| `h` | 没有前导零的小时(如果显示 AM/PM,则为 0 到 23 或 1 到 12) |
| `hh` | 带前导零的小时(如果显示 AM/PM,则为 00 到 23 或 01 到 12) |
| `H` | 没有前导零的小时(0 到 23,即使有 AM/PM 显示) |
| `HH` | 带前导零的小时(00 到 23,即使有 AM/PM 显示) |
| `m` | 没有前导零(0 到 59)的分钟 |
| `mm` | 分钟,前导零(00 到 59) |
| `s` | 秒,不带前导零(0 到 59) |
| `ss` | 秒,带有前导零(00 到 59) |
| `z` | 不带前导零的毫秒数(0 到 999) |
| `zz` | 以零开头的毫秒数(000 到 999) |
| `AP``A` | 使用 AM/PM 显示。 `AP` 将被“AM”或“PM”替换。 |
| `ap``a` | 使用 am/pm 显示。 `ap` 将被“am”或“pm”替换。 |
| `AP``A` | 使用 AM/PM 显示。 `AP` 将被“`AM`”或“`PM`”替换。 |
| `ap``a` | 使用 am/pm 显示。 `ap` 将被“`am`”或“`pm`”替换。 |
| `t` | 时区(例如“ CEST”) |
Table: Time format specifiers
......@@ -519,9 +519,9 @@ out << "The time is " << ct.toString("h:m:s a") << endl;
```
此时间格式说明符使用小时,分钟和秒(不带前导零),并添加 am / pm 周期标识符。
此时间格式说明符使用小时,分钟和秒(不带前导零),并添加 AM/PM 周期标识符。
Output
输出:
```cpp
$ ./customtimeformats
......@@ -585,7 +585,7 @@ out << "Today is " << QDate::longDayName(wd) << endl;
使用`QDate::longDayName()`静态方法,我们获得了工作日的长名称。
Output
输出:
```cpp
$ ./weekday
......@@ -674,7 +674,7 @@ out << "There are " << dt1.daysInYear() << " days in year "
在这里,我们使用日期对象的`daysInYear()`方法获得一年中的天数。
Output
输出:
```cpp
$ ./nofdays
......@@ -737,7 +737,7 @@ if (dates.at(i).isValid()) {
根据`isValid()`方法的结果,我们将有关日期有效性的消息打印到控制台。
Output
输出:
```cpp
$ ./validity
......@@ -794,7 +794,7 @@ out << "There are " << QDate::currentDate().daysTo(xmas)
我们使用`daysTo()`方法来计算直到圣诞节的天数。
Output
输出:
```cpp
$ ./daystofrom
......@@ -839,9 +839,9 @@ out << "The current date is " << cdt.date().toString() << endl;
```
此行使用`date()`方法检索 datetime 对象的日期部分。
此行使用`date()`方法检索日期时间对象的日期部分。
Output
输出:
```cpp
$ ./datetime
......@@ -882,7 +882,7 @@ out << "Julian day for today: " << cd.toJulianDay() << endl;
使用`toJulianDay()`方法返回儒略日。
Output
输出:
```cpp
$ ./julianday
......@@ -945,7 +945,7 @@ out << "Days since Borodino battle: " << j_today - j_borodino << endl;
我们计算了两次战斗以来经过的天数。
Output
输出:
```cpp
$ date
......@@ -998,7 +998,7 @@ out << "Local datetime" << cdt.toLocalTime().toString() << endl;
`toLocalTime()`用于获取本地日期时间。
Output
输出:
```cpp
$ ./utclocal
......@@ -1013,7 +1013,7 @@ Local datetime: Sat Oct 31 20:09:44 2015
纪元是选择作为特定纪元起源的时间瞬间。 例如,在西方基督教国家,时间从耶稣出生的第 0 天开始。 另一个例子是法国共和党日历,使用了十二年。 这个时期是 1792 年 9 月 22 日宣布的共和纪元的开始,即宣布成立第一共和国并废除君主制的那一天。
电脑也有自己的纪元。 最受欢迎的版本之一是 Unix 纪元。 Unix 纪元是 1970 年 1 月 1 日 UTC 时间 00:00:00(或 1970-01-01T00:00:00Z ISO 8601)。 计算机中的日期和时间是根据自该计算机或平台的定义时期以来经过的秒数或时钟滴答数确定的。
电脑也有自己的纪元。 最受欢迎的版本之一是 Unix 纪元。 Unix 纪元是 1970 年 1 月 1 日 UTC 时间 00:00:00(或`1970-01-01T00:00:00Z ISO8601`)。 计算机中的日期和时间是根据自该计算机或平台的定义时期以来经过的秒数或时钟滴答数确定的。
Unix 时间 是自 Unix 纪元以来经过的秒数。
......@@ -1073,7 +1073,7 @@ out << dt.toString() << endl;
```
`setTime_t()`方法用于将 Unix 时间转换为 DateTime,并将其格式化为易于阅读的格式。
`setTime_t()`方法用于将 Unix 时间转换为日期时间,并将其格式化为易于阅读的格式。
```cpp
QDateTime cd = QDateTime::currentDateTime();
......@@ -1083,7 +1083,7 @@ out << cd.toTime_t() << endl;
Qt5 的`toTime_t()`方法也可以用来获取 Unix 时间。
Output
输出:
```cpp
$ ./unixepoch
......
......@@ -96,9 +96,9 @@ for (int val : vals) {
```
我们遍历 for 循环中的向量并打印其内容。
我们遍历`for`循环中的向量并打印其内容。
Output
输出:
```cpp
$ ./myvector
......@@ -165,7 +165,7 @@ for (int i=0; i < authors.size(); ++i) {
```
for 循环中,我们遍历容器并打印其元素。 `at()`方法返回给定索引处的项目。
`for`循环中,我们遍历容器并打印其元素。 `at()`方法返回给定索引处的项目。
```cpp
authors << "Galsworthy" << "Sienkiewicz";
......@@ -192,7 +192,7 @@ for (QString author : authors) {
现在我们打印排序列表。
Output
输出:
```cpp
$ ./mylist
......@@ -251,7 +251,7 @@ QStringListIterator it(items);
```
`QStringListIterator``QStringList`提供了 Java 样式的 constiterator
`QStringListIterator``QStringList`提供了 Java 样式的常迭代器
```cpp
while (it.hasNext()) {
......@@ -262,7 +262,7 @@ while (it.hasNext()) {
使用创建的迭代器,我们将列表的元素打印到终端。 `trimmed()`方法可修剪字符串元素中的空白。
Output
输出:
```cpp
$ ./mystringlist
......@@ -361,7 +361,7 @@ for (QString val : cols1) {
```
使用 for 循环,我们打印`cols1`集中的所有项目。
使用`for`循环,我们打印`cols1`集中的所有项目。
```cpp
QList<QString> lcols = cols1.values();
......@@ -371,7 +371,7 @@ std::sort(lcols.begin(), lcols.end());
不支持对集合进行排序。 我们可以创建一个列表并对其进行排序。 `values()`方法返回一个新的`QList`,其中包含集合中的元素。 `QList`中元素的顺序未定义。
Output
输出:
```cpp
$ ./myset
......@@ -498,7 +498,7 @@ while (it.hasNext()) {
在迭代器的帮助下,我们遍历了地图的所有元素。 `key()`方法返回当前键,`value()`方法返回当前值。
Output
输出:
```cpp
$ ./myqmap
......@@ -620,7 +620,7 @@ std::sort(books.begin(), books.end(), compareByTitle);
`std::sort`算法按书名对列表中的书进行排序。
Output
输出:
```cpp
$ ./sortcustomclass
......
......@@ -87,7 +87,7 @@ out << str.arg(size) << endl;
结果将打印到控制台。
Output
输出:
```cpp
$ ./file_size Makefile
......@@ -166,7 +166,7 @@ while (!in.atEnd()) {
```
while 循环中,我们逐行读取文件,直到文件结束。 如果没有更多数据要从流中读取,则`atEnd()`方法返回 true`readLine()`方法从流中读取一行。
`while`循环中,我们逐行读取文件,直到文件结束。 如果没有更多数据要从流中读取,则`atEnd()`方法返回`true``readLine()`方法从流中读取一行。
```cpp
file.close();
......@@ -175,7 +175,7 @@ file.close();
`close()`方法刷新数据并关闭文件句柄。
Output
输出:
```cpp
$ ./read_file colours
......@@ -268,7 +268,7 @@ file.close();
最后,文件句柄被关闭。
Output
输出:
```cpp
$ ./write2file
......@@ -415,7 +415,7 @@ QString owner = fileinfo.owner();
文件的所有者通过`QFileInfo's` `owner()`方法确定。
Output
输出:
```cpp
$ touch myfile
......@@ -482,7 +482,7 @@ QDateTime last_mod = fileinfo.lastModified();
`lastModified()`方法返回上次修改文件的日期和时间。
Output
输出:
```cpp
$ ./file_times Makefile
......@@ -530,7 +530,7 @@ if (dir.mkdir("mydir")) {
```
`mkdir()`方法创建一个目录。 如果目录创建成功,则返回 true
`mkdir()`方法创建一个目录。 如果目录创建成功,则返回`true`
```cpp
if (dir.exists("mydir2")) {
......@@ -600,7 +600,7 @@ out << "Rooth path:" << QDir::rootPath() << endl;
根目录通过`QDir::rootPath()`方法返回。
Output
输出:
```cpp
$ ./special_paths
......@@ -703,7 +703,7 @@ QString compSuffix = fileinfo.completeSuffix();
文件结尾可能由几部分组成。 `completeSuffix()`方法返回第一个点字符之后(但不包括)后的文件中的所有字符。
Output
输出:
```cpp
$ ./file_path ~/Downloads/qt-everywhere-opensource-src-5.5.1.tar.gz
......@@ -718,7 +718,7 @@ Whole suffix: 5.1.tar.gz
## 权限
文件系统中的文件具有保护系统。 文件带有标志,这些标志确定谁可以访问和修改它们。 `QFile::permissions()`方法返回有关文件的 OR-ed 标志的枚举。
文件系统中的文件具有保护系统。 文件带有标志,这些标志确定谁可以访问和修改它们。 `QFile::permissions()`方法返回有关文件的 OR-ED 标志的枚举。
`permissions.cpp`
......@@ -801,7 +801,7 @@ int main(int argc, char *argv[]) {
```
该示例为给定文件生成类似 Unix 的权限列表。 有几种可能的用户类型:所有者,文件所属的组以及其余的称为其他用户。 前三个位置属于文件的所有者,后三个位置属于文件的组,后三个字符属于其他字符。 权限共有四种:读取(r),写入或修改(w),执行(x)和无权限(-)。
该示例为给定文件生成类似 Unix 的权限列表。 有几种可能的用户类型:所有者,文件所属的组以及其余的称为其他用户。 前三个位置属于文件的所有者,后三个位置属于文件的组,后三个字符属于其他字符。 权限共有四种:读取(`r`),写入或修改(`w`),执行(`x`)和无权限(`-`)。
```cpp
QFile::Permissions ps = QFile::permissions(filename);
......@@ -828,7 +828,7 @@ if (ps & QFile::ReadOwner) {
我们使用&运算符确定返回的枚举是否包含`QFile::ReadOwner`标志。
Output
输出:
```cpp
$ ./permissions Makefile
......@@ -976,7 +976,7 @@ for (int i = 0; i < list.size(); ++i) {
我们浏览文件列表并打印它们的名称和大小。 第一列保持对齐,并在必要时用空格填充; 仅将第二列添加到该行的末尾。
Output
输出:
```cpp
$ ./list_dir .
......
......@@ -186,7 +186,7 @@ quit->setShortcut(tr("CTRL+Q"));
```
在这里,我们创建键盘快捷键。 通过按下此快捷方式,我们将运行 quit 操作,该操作将退出应用。
在这里,我们创建键盘快捷键。 通过按下此快捷方式,我们将运行退出操作,该操作将退出应用。
```cpp
file->addSeparator();
......@@ -304,7 +304,7 @@ viewst->setChecked(true);
```
我们创建一个 actiona,并使用`setCheckable()`方法对其进行检查。 `setChecked()`方法进行检查。
我们创建一个动作,并使用`setCheckable()`方法对其进行检查。 `setChecked()`方法进行检查。
```cpp
if (viewst->isChecked()) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册