Browse Source

完成所有章节翻译,待完成所有校正。

caiwc 9 years ago
parent
commit
e91ed3775e

+ 5 - 0
SUMMARY.md

@@ -129,6 +129,11 @@
        * [格式化表格(Formatting the Table)](extending_qml_with_c++/formatting_the_table.md)
        * [读取数据(Reading Data)](extending_qml_with_c++/reading_data.md)
        * [写入数据(Writing Data)](extending_qml_with_c++/writing_data.md)
+       * [收尾工作(Finishing Touch)](extending_qml_with_c++/finishing_touch.md)
+   * [总结(Summary)](extending_qml_with_c++/summary.md)
 * [其它(Other)](other/README.md)
+   * [示例源码](other/assets.md)
+   * [术语英汉对照表](other/enginsh_to_chinses.md)
+   * [格式定义](other/book_format.md)
    * [协作校正](other/collaboration_correction.md)
 

+ 43 - 0
extending_qml_with_c++/finishing_touch.md

@@ -0,0 +1,43 @@
+# 收尾工作(Finishing Touch)
+
+这个应用程序还没有真正的完成。我们想要显示旗帜,并允许用户通过从数据模型中移除城市来修改文档。
+
+这些旗帜被存放在```main.qml```文件夹下的```flags```文件夹中。为了在表格列中显示它们,我们需要定义一个渲染旗帜图片的代理。
+
+```
+TableViewColumn {
+    delegate: Item {
+        Image {
+            anchors.centerIn: parent
+            source: 'flags/' + styleData.value
+        }
+    }
+    role: 'flag'
+    title: "Flag"
+    width: 40
+}
+```
+
+它将JS数据模型中暴露的flag属性作为```styleData.value```交给代理。代理调整图片路径,并在路径前面加上```'flags/'```并显示它。
+
+对于移除,我们使用相似的技巧来显示一个移除按钮。
+
+```
+TableViewColumn {
+    delegate: Button {
+        iconSource: "remove.png"
+        onClicked: {
+            var data = view.model
+            data.splice(styleData.row, 1)
+            view.model = data
+        }
+    }
+    width: 40
+}
+```
+
+数据移除操作,我们坚持从视图模型上获取数据,然后使用JS的```splice```函数移除一个条目。这个方法提供给我们的模型来自一个JS数组。```splice```方法通过移除已有元素,添加新的元素来改变数组内容。
+
+一个JS数组不如一个Qt模型智能,例如```QAbstractItemModel```,它无法通知视图行更新或者数据更新。由于视图无法接收到任何更新的通知,它无法更新数据显示。只有在我们将数据重新设置回视图时,视图才会知道有新的数据需要刷新视图内容。使用```view.model = data```再次设置数据模型可以让视图知道有数据更新。
+
+![](http://qmlbook.github.io/_images/cityui_populated.png)

+ 9 - 0
extending_qml_with_c++/summary.md

@@ -0,0 +1,9 @@
+# 总结(Summary)
+
+插件的创建非常简单,但是它可以复用,并且为不同的应用程序扩展类型。使用创建的插件是非常灵活的解决方案。例如你可以只使用```qmlscene```开始创建UI。打开CityUI项目文件夹,从```qmlscene```的```main.qml```开始。我真的鼓励大家使用```与qmlscene```一起工作的方式写应用程序。对于UI开发者,这将是一个巨大的改变,也是一个好的习惯来保证清晰的分离。
+
+使用插件有一个缺点,对于简单的应用程序开发增加了难度。你需要为你的应用程序开发插件。如果这是一个问题,你也可以使用与```FileIO```对象相同的机制使用```qmlRegisterType```直接注册到你的```main.cpp```中。QML代码保持一样就可以了。
+
+通常在大型项目中,你不会像这样使用应用程序。你有一个与```qmlscene```类似的简单的qml运行环境,并且需要所有本地的功能插件。你的项目使用这些qml扩展插件,也是简单纯粹的qml项目。这为UI的变换提供了最大的灵活性并移除了编译步骤。在编辑完成一个QML文件后,你只需要运行UI。这允许用户界面开发者保持灵活性并迅速的使所有的小修改立刻得到响应。
+
+插件提供了健壮和清晰的C++后台开发与QML前端开发的分离。当开发QML插件时,通常在QML端有一个想法,并在使用C+=实现前,可以使用QML的样本模型进行API验证。如果API是C++人员写的,通常会犹豫去改变它或者重写它。复制一个QML提供的API通常更加灵活并且初始投资更少。当使用插件切换一个样本模型API和一个真是API时,仅仅只需要改变qml运行环境的导入路径。

+ 5 - 1
extending_qml_with_c++/writing_data.md

@@ -1,6 +1,6 @@
 # 写入数据(Writing Data)
 
-我们连接保存动作到saveDocument()函数来保存文档。保存文档函数从视图中取出模型,模型是一个JS对象,并使用JSON.stringify()函数将它转换为一个字符串。将结果字符串设置到FileIO对象的文本属性中,并调用write()来保存数据到磁盘中。在stringify函数上参数null和4将会使用4个空格缩进格式化JSON数据结果。这只是为了保存文档更好阅读。
+我们连接保存动作到```saveDocument()```函数来保存文档。保存文档函数从视图中取出模型,模型是一个JS对象,并使用```JSON.stringify()```函数将它转换为一个字符串。将结果字符串设置到```FileIO```对象的文本属性中,并调用```write()```来保存数据到磁盘中。在```stringify```函数上参数```null``````4```将会使用4个空格缩进格式化JSON数据结果。这只是为了保存文档更好阅读。
 
 ```
 Action {
@@ -21,3 +21,7 @@ FileIO {
     id: io
 }
 ```
+
+从根本上说,这个应用程序就是读取,写入和现实一个JSON文档。考虑下如果使用XML格式读取和写入,会花多少时间。使用JSON格式你只需要读取/写入一个文本文件或者发送/接收一个文本缓存。
+
+![](http://qmlbook.github.io/_images/cityui_table.png)

+ 29 - 0
other/assets.md

@@ -0,0 +1,29 @@
+# 示例源码
+
+[Chapter 01 examples (ch01-assets.tgz)](http://qmlbook.github.io/assets/ch01-assets.tgz)
+
+[Chapter 04 examples (ch04-assets.tgz)](http://qmlbook.github.io/assets/ch04-assets.tgz)
+
+[Chapter 05 examples (ch05-assets.tgz)](http://qmlbook.github.io/assets/ch05-assets.tgz)
+
+[Chapter 06 examples (ch06-assets.tgz)](http://qmlbook.github.io/assets/ch06-assets.tgz)
+
+[Chapter 07 examples (ch07-assets.tgz)](http://qmlbook.github.io/assets/ch07-assets.tgz)
+
+[Chapter 08 examples (ch08-assets.tgz)](http://qmlbook.github.io/assets/ch08-assets.tgz)
+
+[Chapter 09 examples (ch09-assets.tgz)](http://qmlbook.github.io/assets/ch09-assets.tgz)
+
+[Chapter 10 examples (ch10-assets.tgz)](http://qmlbook.github.io/assets/ch10-assets.tgz)
+
+[Chapter 11 examples (ch11-assets.tgz)](http://qmlbook.github.io/assets/ch11-assets.tgz)
+
+[Chapter 12 examples (ch12-assets.tgz)](http://qmlbook.github.io/assets/ch12-assets.tgz)
+
+[Chapter 13 examples (ch13-assets.tgz)](http://qmlbook.github.io/assets/ch13-assets.tgz)
+
+[Chapter 14 examples (ch14-assets.tgz)](http://qmlbook.github.io/assets/ch14-assets.tgz)
+
+[Chapter 15 examples (ch15-assets.tgz)](http://qmlbook.github.io/assets/ch15-assets.tgz)
+
+[Chapter 16 examples (ch16-assets.tgz)](http://qmlbook.github.io/assets/ch16-assets.tgz)

+ 1 - 0
other/book_format.md

@@ -0,0 +1 @@
+# 格式定义

+ 1 - 1
other/collaboration_correction.md

@@ -64,7 +64,7 @@
 
 ![](https://github.com/cwc1987/QmlBook-In-Chinese/blob/master/other/process_images/11.PNG?raw=true)
 
-网站会自动检测你的工作分支与我们项目的差别,确认提交内容,点击Create pull rqeust绿色按键添加修改内容描述。
+系统会检测你的工作分支与我们项目的差别,确认提交内容,点击Create pull rqeust绿色按键添加修改内容描述。
 
 ![](https://github.com/cwc1987/QmlBook-In-Chinese/blob/master/other/process_images/12.PNG?raw=true)
 

+ 1 - 0
other/enginsh_to_chinses.md

@@ -0,0 +1 @@
+# 术语英汉对照表