Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
zetcode-zh
提交
a3b3fec4
Z
zetcode-zh
项目概览
OpenDocCN
/
zetcode-zh
9 个月 前同步成功
通知
2
Star
157
Fork
40
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Z
zetcode-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a3b3fec4
编写于
6月 21, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-06-21 10:37:40
上级
98966b82
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
37 addition
and
37 deletion
+37
-37
docs/gui/150.md
docs/gui/150.md
+1
-1
docs/gui/151.md
docs/gui/151.md
+3
-3
docs/gui/152.md
docs/gui/152.md
+8
-8
docs/gui/153.md
docs/gui/153.md
+1
-1
docs/gui/154.md
docs/gui/154.md
+1
-1
docs/gui/155.md
docs/gui/155.md
+6
-6
docs/gui/156.md
docs/gui/156.md
+1
-1
docs/gui/158.md
docs/gui/158.md
+2
-2
docs/gui/159.md
docs/gui/159.md
+2
-2
docs/gui/160.md
docs/gui/160.md
+7
-7
docs/gui/161.md
docs/gui/161.md
+2
-2
docs/gui/162.md
docs/gui/162.md
+3
-3
未找到文件。
docs/gui/150.md
浏览文件 @
a3b3fec4
...
...
@@ -978,7 +978,7 @@ Puff::Puff(QWidget *parent)
```
在构造函数中,我们启动计时器。 每 15
ms 会生成一个计时器事件。
在构造函数中,我们启动计时器。 每 15ms 会生成一个计时器事件。
```
void Puff::timerEvent(QTimerEvent *e) {
...
...
docs/gui/151.md
浏览文件 @
a3b3fec4
...
...
@@ -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
docs/gui/152.md
浏览文件 @
a3b3fec4
# 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
docs/gui/153.md
浏览文件 @
a3b3fec4
...
...
@@ -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
)
...
...
docs/gui/154.md
浏览文件 @
a3b3fec4
...
...
@@ -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
docs/gui/155.md
浏览文件 @
a3b3fec4
...
...
@@ -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
docs/gui/156.md
浏览文件 @
a3b3fec4
...
...
@@ -62,7 +62,7 @@ self.statusBar().showMessage('Ready')
```
要获取状态栏,我们调用
`QtGui.QMainWindow`
类的
`statusBar()`
方法。 该方法的第一次调用将创建一个状态栏。 后续调用返回
statusbar
对象。
`showMessage()`
在状态栏上显示一条消息。
要获取状态栏,我们调用
`QtGui.QMainWindow`
类的
`statusBar()`
方法。 该方法的第一次调用将创建一个状态栏。 后续调用返回
状态栏
对象。
`showMessage()`
在状态栏上显示一条消息。
## 菜单栏
...
...
docs/gui/158.md
浏览文件 @
a3b3fec4
...
...
@@ -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):
...
...
docs/gui/159.md
浏览文件 @
a3b3fec4
...
...
@@ -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:
...
...
docs/gui/160.md
浏览文件 @
a3b3fec4
...
...
@@ -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 工具箱中提供了水平或垂直进度条。 程序员可以为进度条设置最小值和最大值。 默认值为 0
、
99。
进度条是当我们处理冗长的任务时使用的小部件。 它具有动画效果,以便用户知道我们的任务正在进行中。
`QtGui.QProgressBar`
小部件在 PySide 工具箱中提供了水平或垂直进度条。 程序员可以为进度条设置最小值和最大值。 默认值为 0
,
99。
```
#!/usr/bin/python
...
...
@@ -454,7 +454,7 @@ def timerEvent(self, e):
```
每个
`QtCore.QObject`
及其子代都有一个
`timerEvent()`
事件处理程序。 为了对计时器事件做出反应,我们重新实现了事件处理程序。 我们更新
self.step
变量,并为进度栏小部件设置一个新值。
每个
`QtCore.QObject`
及其子代都有一个
`timerEvent()`
事件处理程序。 为了对计时器事件做出反应,我们重新实现了事件处理程序。 我们更新
`self.step`
变量,并为进度栏小部件设置一个新值。
```
def doAction(self):
...
...
docs/gui/161.md
浏览文件 @
a3b3fec4
...
...
@@ -265,14 +265,14 @@ splitter2.addWidget(splitter1)
```
我们还可以将
splitter 添加到另一个 splitter
小部件。
我们还可以将
分割器添加到另一个分割器
小部件。
```
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
```
我们使用
Cleanlooks
风格。 在某些样式中,框架不可见。
我们使用
`Cleanlooks`
风格。 在某些样式中,框架不可见。
![
QtGui.QSplitter widget
](
img/7668afd2998ab9b9957d67c039740ef9.jpg
)
...
...
docs/gui/162.md
浏览文件 @
a3b3fec4
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录