提交 a3b3fec4 编写于 作者: W wizardforcel

2020-06-21 10:37:40

上级 98966b82
......@@ -978,7 +978,7 @@ Puff::Puff(QWidget *parent)
```
在构造函数中,我们启动计时器。 每 15 ms 会生成一个计时器事件。
在构造函数中,我们启动计时器。 每 15ms 会生成一个计时器事件。
```
void Puff::timerEvent(QTimerEvent *e) {
......
......@@ -8,7 +8,7 @@
## 刻录小部件
在下一个示例中,我们创建一个自定义的 Burning 小部件。 可以在 Nero 或 K3B 之类的应用中看到此小部件。 该小部件将从头开始创建。
在下一个示例中,我们创建一个自定义的烧录小部件。 可以在 Nero 或 K3B 之类的应用中看到此小部件。 该小部件将从头开始创建。
`burning.h`
......@@ -288,7 +288,7 @@ QString num[] = { "75", "150", "225", "300", "375", "450",
```
我们使用这些数字来构建 Burning 小部件的比例。
我们使用这些数字来构建烧录小部件的比例。
```
int width = size().width();
......@@ -365,4 +365,4 @@ int main(int argc, char *argv[]) {
Figure: The Burning widget
在 Qt4 教程的这一部分中,我们创建了一个自定义的 Burning 小部件。
\ No newline at end of file
在 Qt4 教程的这一部分中,我们创建了一个自定义的烧录小部件。
\ No newline at end of file
# Qt4 中的 Breakout 游戏
# Qt4 中的打砖块游戏
> 原文: [http://zetcode.com/gui/qt4/breakoutgame/](http://zetcode.com/gui/qt4/breakoutgame/)
在 Qt4 教程的这一部分中,我们创建一个简单的 Breakout 游戏克隆。
在 Qt4 教程的这一部分中,我们创建一个简单的打砖块游戏克隆。
Breakout 是 Atari Inc.开发的一款街机游戏。该游戏创建于 1976 年。在该游戏中,玩家移动桨叶并弹跳球。 目的是销毁窗口顶部的砖块。 可以在此处下载游戏图像。
打砖块是 Atari Inc.开发的一款街机游戏。该游戏创建于 1976 年。在该游戏中,玩家移动桨叶并弹跳球。 目的是销毁窗口顶部的砖块。 可以在此处下载游戏图像。
## 开发
......@@ -165,7 +165,7 @@ class Brick {
```
这是砖对象的头文件。 如果销毁了积木,则`destroyed`变量将设置为 true
这是砖对象的头文件。 如果销毁了积木,则`destroyed`变量将设置为`true`
`brick.cpp`
......@@ -796,7 +796,7 @@ for (int i=0; i<5; i++) {
```
Breakout 对象的构造函数中,我们实例化了三十个砖块。
打砖块对象的构造函数中,我们实例化了三十个砖块。
```
void Breakout::paintEvent(QPaintEvent *e) {
......@@ -882,7 +882,7 @@ void Breakout::moveObjects() {
```
`moveObjects()`方法移动球和桨对象。 他们自己的 move 方法被调用。
`moveObjects()`方法移动球和桨对象。 他们自己的移动方法被调用。
```
void Breakout::keyReleaseEvent(QKeyEvent *e) {
......@@ -969,7 +969,7 @@ void Breakout::startGame() {
```
`startGame()`方法重置球和桨对象; 他们被转移到他们的初始位置。 在 for 循环中,我们将每个积木的`destroyed`标志重置为 false,从而将它们全部显示在窗口中。 `gameOver``gameWon``gameStarted`变量获得其初始布尔值。 最后,使用`startTimer()`方法启动计时器。
`startGame()`方法重置球和桨对象; 他们被转移到他们的初始位置。 在`for`循环中,我们将每个积木的`destroyed`标志重置为`false`,从而将它们全部显示在窗口中。 `gameOver``gameWon``gameStarted`变量获得其初始布尔值。 最后,使用`startTimer()`方法启动计时器。
```
void Breakout::pauseGame() {
......@@ -1076,4 +1076,4 @@ int main(int argc, char *argv[]) {
Figure: The Breakout game
这是 Qt4 中的 Breakout 游戏。
\ No newline at end of file
这是 Qt4 中的打砖块游戏。
\ No newline at end of file
......@@ -25,7 +25,7 @@
## PySide
PySide 是 Python 库,用于创建跨平台的图形用户界面。 它是 Qt 框架的 Python 绑定。 Qt 库是功能最强大的 GUI 库之一。 它是由 Digia 和 Qt Project 开发的。
PySide 是 Python 库,用于创建跨平台的图形用户界面。 它是 Qt 框架的 Python 绑定。 Qt 库是功能最强大的 GUI 库之一。 它是由 Digia 和 Qt 项目开发的。
[Tweet](https://twitter.com/share)
......
......@@ -28,6 +28,6 @@ Python 是最受欢迎的编程语言之一。 根据 [langpop.com](http://langp
## Python 工具包
为了创建现代的图形用户界面,Python 程序员可以在以下不错的选项中进行选择:PySide,PyQt4,Python / Gnome(以前的 PyGTK)和 wxPython。
为了创建现代的图形用户界面,Python 程序员可以在以下不错的选项中进行选择:PySide,PyQt4,Python/Gnome(以前的 PyGTK)和 wxPython。
本章是对 PySide 工具箱的介绍。
\ No newline at end of file
......@@ -43,7 +43,7 @@ app = QtGui.QApplication(sys.argv)
```
每个 PySide 应用都必须创建一个应用对象。 该应用对象位于 QtGui 模块中。 `sys.argv`参数是命令行中的参数列表。 可以从外壳运行 Python 脚本。 这是一种我们可以控制脚本启动的方式。
每个 PySide 应用都必须创建一个应用对象。 该应用对象位于`QtGui`模块中。 `sys.argv`参数是命令行中的参数列表。 可以从外壳运行 Python 脚本。 这是一种我们可以控制脚本启动的方式。
```
wid = QtGui.QWidget()
......@@ -78,7 +78,7 @@ sys.exit(app.exec_())
```
最后,我们进入应用的主循环。 事件处理从这一点开始。 mainloop 从窗口系统接收事件,并将其分配给应用小部件。 如果调用`exit()`方法或主窗口小部件被销毁,则主循环结束。 `sys.exit()`方法可确保干净退出。 将告知环境应用如何结束。
最后,我们进入应用的主循环。 事件处理从这一点开始。 主循环从窗口系统接收事件,并将其分配给应用小部件。 如果调用`exit()`方法或主窗口小部件被销毁,则主循环结束。 `sys.exit()`方法可确保干净退出。 将告知环境应用如何结束。
您想知道为什么`exec_()`方法下划线吗? 一切都有意义。 显然是因为`exec`是 Python 关键字。 因此,使用了`exec_()`
......@@ -144,7 +144,7 @@ class Example(QtGui.QWidget):
```
面向对象编程中最重要的三件事是类,数据和方法。 在这里,我们创建一个名为 Example 的新类。 Example 类继承自`QtGui.QWidget`类。 这意味着我们必须调用两个构造函数。 第一个用于 Example 类,第二个用于继承类。 使用`super()`方法调用第二个。
面向对象编程中最重要的三件事是类,数据和方法。 在这里,我们创建一个名为`Example`的新类。 `Example`类继承自`QtGui.QWidget`类。 这意味着我们必须调用两个构造函数。 第一个用于`Example`类,第二个用于继承类。 使用`super()`方法调用第二个。
```
self.setGeometry(300, 300, 250, 150)
......@@ -334,7 +334,7 @@ qbtn = QtGui.QPushButton('Quit', self)
```
我们创建一个按钮。 该按钮是`QtGui.QPushButton`类的实例。 构造函数的第一个参数是按钮的标签。 第二个参数是父窗口小部件。 父窗口小部件是 Example 窗口小部件,通过继承它是`QtGui.QWidget`
我们创建一个按钮。 该按钮是`QtGui.QPushButton`类的实例。 构造函数的第一个参数是按钮的标签。 第二个参数是父窗口小部件。 父窗口小部件是`Example`窗口小部件,通过继承它是`QtGui.QWidget`
```
qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
......@@ -492,7 +492,7 @@ self.center()
```
将使窗口居中的代码位于自定义 center()方法中。
将使窗口居中的代码位于自定义`center()`方法中。
```
qr = self.frameGeometry()
......@@ -520,6 +520,6 @@ self.move(qr.topLeft())
```
我们将应用窗口的左上角移动到 qr 矩形的左上角,从而将窗口居中放置在屏幕上。
我们将应用窗口的左上角移动到`qr`矩形的左上角,从而将窗口居中放置在屏幕上。
在 PySide 教程的这一部分中,我们介绍了一些基础知识。
\ No newline at end of file
......@@ -62,7 +62,7 @@ self.statusBar().showMessage('Ready')
```
要获取状态栏,我们调用`QtGui.QMainWindow`类的`statusBar()`方法。 该方法的第一次调用将创建一个状态栏。 后续调用返回 statusbar 对象。 `showMessage()`在状态栏上显示一条消息。
要获取状态栏,我们调用`QtGui.QMainWindow`类的`statusBar()`方法。 该方法的第一次调用将创建一个状态栏。 后续调用返回状态栏对象。 `showMessage()`在状态栏上显示一条消息。
## 菜单栏
......
......@@ -305,7 +305,7 @@ class Communicate(QtCore.QObject):
```
我们基于`QtCore.QObject`创建一个类。 实例化时会创建一个 closeApp 信号。
我们基于`QtCore.QObject`创建一个类。 实例化时会创建一个`closeApp`信号。
```
self.c = Communicate()
......@@ -313,7 +313,7 @@ self.c.closeApp.connect(self.close)
```
创建 Communicate 类的实例。 我们将`QtGui.QMainWindow``close()`槽连接到 closeApp 信号。
创建`Communicate`类的实例。 我们将`QtGui.QMainWindow``close()`槽连接到 closeApp 信号。
```
def mousePressEvent(self, event):
......
......@@ -72,7 +72,7 @@ text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog',
```
这行显示输入对话框。 第一个字符串是对话框标题,第二个字符串是对话框中的消息。 对话框返回输入的文本和布尔值。 如果单击“确定”按钮,则布尔值将为 true,否则为 false
这行显示输入对话框。 第一个字符串是对话框标题,第二个字符串是对话框中的消息。 对话框返回输入的文本和布尔值。 如果单击“确定”按钮,则布尔值将为`true`,否则为`false`
```
if ok:
......@@ -259,7 +259,7 @@ font, ok = QtGui.QFontDialog.getFont()
```
在这里我们弹出字体对话框。 `getFont()`方法返回字体名称和 ok 参数。 如果用户单击“确定”,则等于“真”。 否则为 False
在这里我们弹出字体对话框。 `getFont()`方法返回字体名称和`ok`参数。 如果用户单击“确定”,则等于`True`。 否则为`False`
```
if ok:
......
......@@ -101,9 +101,9 @@ def changeTitle(self, state):
Figure: QtGui.QCheckBox
## `ToggleButton`
## 开关按钮
PySide 没有用于 ToggleButton 的小部件。 要创建 ToggleButton,我们在特殊模式下使用`QtGui.QPushButton`。 ToggleButton 是具有两种状态的按钮。 已按下但未按下。 通过单击可以在这两种状态之间切换。 在某些情况下此功能非常合适。
PySide 没有用于开关按钮的小部件。 要创建开关按钮,我们在特殊模式下使用`QtGui.QPushButton`。 开关按钮是具有两种状态的按钮。 已按下但未按下。 通过单击可以在这两种状态之间切换。 在某些情况下此功能非常合适。
```
#!/usr/bin/python
......@@ -206,14 +206,14 @@ greenb.setCheckable(True)
```
要创建 ToggleButton,我们创建一个`QtGui.QPushButton`并通过调用`setCheckable()`方法使其可检查。
要创建开关按钮,我们创建一个`QtGui.QPushButton`并通过调用`setCheckable()`方法使其可检查。
```
greenb.clicked[bool].connect(self.setColor)
```
我们将`clicked[bool]`信号连接到用户定义的方法。 请注意,此信号类型将 bool 参数发送给该方法。 参数值是 true 还是 false,取决于按钮的状态,例如 是否检查/切换。
我们将`clicked[bool]`信号连接到用户定义的方法。 请注意,此信号类型将`bool`参数发送给该方法。 参数值是 true 还是 false,取决于按钮的状态,例如 是否检查/切换。
```
source = self.sender()
......@@ -331,7 +331,7 @@ sld.valueChanged[int].connect(self.changeValue)
```
我们将`valueChanged[int]`信号连接到用户定义的 changeValue()方法。
我们将`valueChanged[int]`信号连接到用户定义的`changeValue()`方法。
```
if value == 0:
......@@ -348,7 +348,7 @@ Figure: QtGui.QSlider widget
## `QtGui.QProgressBar`
进度条是当我们处理冗长的任务时使用的小部件。 它具有动画效果,以便用户知道我们的任务正在进行中。 `QtGui.QProgressBar`小部件在 PySide 工具箱中提供了水平或垂直进度条。 程序员可以为进度条设置最小值和最大值。 默认值为 099。
进度条是当我们处理冗长的任务时使用的小部件。 它具有动画效果,以便用户知道我们的任务正在进行中。 `QtGui.QProgressBar`小部件在 PySide 工具箱中提供了水平或垂直进度条。 程序员可以为进度条设置最小值和最大值。 默认值为 099。
```
#!/usr/bin/python
......@@ -454,7 +454,7 @@ def timerEvent(self, e):
```
每个`QtCore.QObject`及其子代都有一个`timerEvent()`事件处理程序。 为了对计时器事件做出反应,我们重新实现了事件处理程序。 我们更新 self.step 变量,并为进度栏小部件设置一个新值。
每个`QtCore.QObject`及其子代都有一个`timerEvent()`事件处理程序。 为了对计时器事件做出反应,我们重新实现了事件处理程序。 我们更新`self.step`变量,并为进度栏小部件设置一个新值。
```
def doAction(self):
......
......@@ -265,14 +265,14 @@ splitter2.addWidget(splitter1)
```
我们还可以将 splitter 添加到另一个 splitter 小部件。
我们还可以将分割器添加到另一个分割器小部件。
```
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
```
我们使用 Cleanlooks 风格。 在某些样式中,框架不可见。
我们使用`Cleanlooks`风格。 在某些样式中,框架不可见。
![QtGui.QSplitter widget](img/7668afd2998ab9b9957d67c039740ef9.jpg)
......
......@@ -90,7 +90,7 @@ class Button(QtGui.QPushButton):
```
为了在`QtGui.QPushButton`小部件上放置文本,我们必须重新实现一些方法。 因此,我们创建了自己的 Button 类,该类将从`QtGui.QPushButton`类继承。
为了在`QtGui.QPushButton`小部件上放置文本,我们必须重新实现一些方法。 因此,我们创建了自己的`Button`类,该类将从`QtGui.QPushButton`类继承。
```
self.setAcceptDrops(True)
......@@ -117,7 +117,7 @@ def dropEvent(self, e):
```
通过重新实现`dropEvent()`方法,我们将定义在 drop 事件上将要执行的操作。 在这里,我们更改按钮小部件的文本。
通过重新实现`dropEvent()`方法,我们将定义在放置事件上将要执行的操作。 在这里,我们更改按钮小部件的文本。
```
qe = QtGui.QLineEdit('', self)
......@@ -228,7 +228,7 @@ class Button(QtGui.QPushButton):
```
我们创建一个 Button 类,该类将从`QtGui.QPushButton`派生。 我们还重新实现了`QtGui.QPushButton`的两种方法`mouseMoveEvent()``mousePressEvent()`。 mouseMoveEvent()方法是拖动&放置操作开始的地方。
我们创建一个`Button`类,该类将从`QtGui.QPushButton`派生。 我们还重新实现了`QtGui.QPushButton`的两种方法`mouseMoveEvent()``mousePressEvent()``mouseMoveEvent()`方法是拖动&放置操作开始的地方。
```
if event.buttons() != QtCore.Qt.RightButton:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册