# 4.3. 开发过程

用Kdevwelop开发的应用一般可以分为两个主要的步骤：首先，你必须利用 Kappwizard 生成一个程序轮廓，然后剩下的开发工作必须利用Kdevelop的特色来完 成。它只要求你作为程序员的工作能力。为描述开发过程，我们假设你希望建立一个 Qt/KDE 应用，它说明了需要使用Kdevelop的大多数特色来着手于这些项目类型，因 此你有一个一般的做法。

## 4.3.1. 建立程序框架

开始创建你的应用，你一般需要访问Kappwizard ；输入项目名并生成程序，通过 这一步骤，应用向导会自动为应用创建项目文件并将Kdevelop区域插入在随后展开应用时 会用到的Makefile.am 's,项目文件是你在以后打开项目时必须装载的文件。

你通过项目菜单进入"新建"项，访问Kappwizard 。当向导出现时，你还必须在第 一页指定项目类型，选择"下一页"会将你带到下一页，你必须在此插入项目名，版本，目录 和你的个人选项，第三页会提供更多个人选项，第四页和第五页允许根据你的选择自动插入 头部和implementation 编辑头文件。如果你已经有了你想要使用的头文件，你也可以 选择那些文件。最后一页包含了一个output 窗口和一个错误信息窗口。当选择"生成" 时，你的应用即被生成。所执行的操作在output 窗口可见。如果"准备"出现在 output 窗口，Kappwizard 已经完成，你可以通过选择"退出"返回编程环境。为 建立二进制文件，你还可以通过从创建菜单中选择"make生成"，或选择工具条上的相关按 钮。你还可以通过从创建菜单中选择"执行"来测试已有功能。

## 4.3.2. 开发一个应用

本节将描述使用Kdevelop和dialog editor -开发应用程序的开发阶段--所有的 工作都可在IDE中完成。

开发步骤一般说来涉及编辑源文件，编译项目代码及Linker 连接所有对象文件至最 终二进制的连接过程。妨碍编译连接的错误errors 或是通过debugging 调试会话 可以查找到的臭虫都应该找出。最后，文档必须要扩展，翻译必须要加注。但以上各个步骤 都是可以互相混杂，要想描述如何建立你自己的应用程序的一般方法并不是那么容易。典 型的情况是，通常的程序先创建项目所有的可视部件，例如，主视，和设置路径的对话框， 设置选项的对话框；在生成源代码，实现所有需要的连接，例如：改变菜单条和工具条，为 新菜单词条加入状态条帮助，并用显示你的对象给新的成员填充功能。然后你就可以编译你 的应用，测试其性能，修正errors ，再重新检测。后面几节会说明这些工作是如何完 成的；为建立你特别的应用，你可以只选择另一种方式--Kdevelop给你足够的灵活度来决 定什么时候做什么。

### 4.3.2.1. 用户界面

一个项目的用户界面实际上是用户所见的部分及它和程序的桥梁。因此，一个程序一般 都含有菜单条，工具条和状态条，就象有主视的一样（例如编辑器的文本框键入）， Kappwizard 创建的应用已经包含了一个复杂的功能--框架结构会包含标准元素，例如 条和按钮。当你开发你的应用时，你必须扩展给定的结构才来让程序有你想要提供的交互性。 这一工作的步骤之一就是对话框设计，例如，改变画图应用中的笔刷宽度值。这可由Kdevelop 内部的对话框编辑器dialog editor 来轻易完成。现在，你如何创造那些美观的对话框呢？由于 Qt-library 是GUI 工具箱，它提供了一个所谓的"widgets "基本套件；例 如，表示纯文本的标签，文本输入的行编辑，导航按钮及选择命令。 用户界面中除了这些"低水平"的部件，还提供标准的对话，随时可用，例如打印对话框 printing 。KDE库KDE-libraries 是基于Qt-库的，它包括某些对话的替代及 可用于你的应用的其他widgets 。这样，当你开始设计你的用户的应用操作时，你应 该让你自己尽量的熟悉随Qt 和 KDE 提供的widgets 。Qt的在线文档为大多数 widgets 提供了快照，因此你应该先去看看。然后我们建议你仔细看看KDE- UI库, 它提供了其他一些widgets 。象KHTML 库一样的库包含了很专业化的 widgets ，很多程序都在使用。它只是简化了应用的设计，例如Qt提供的预先定义 的对话。对于你自己的对话，这些较低级的widgets 正是你所需要的。一个对话仅仅 由不同的widgets 结合在一起组成了一个界面，它在技术上是由C++代码编程于一个 从`QWidget`中派生出的一个类，或一个更专业化的继承了 `QWidget` 的对话类。因此使用widget的程序需要一个widget类的对象。--这几乎是你要理解对话及 视图是如何使用的所有东西。

现在Kdevelop的对话框编辑器dialog editor 提供一个很好的方法来简化你的对话的建 立过程，它可以可视化得创建对话和用户界面，你无须再将对话和纯C++ 代码结合再一起。 --这是创建界面的较为复杂的方法。通过选择视图菜单中的相关条目可切换至对话框编辑器 dialog editor (或通过工具条按钮)。你可以看见Kdevelop的界面改变了，但是， 菜单条和工具条仍然看来十分熟悉。这使得在两种工作模式间前后切换变得十分容易，你很 快会习惯于它们的。然后你可由你所愿建立你的视图和对话框。并设置所有视图包含项目的可 用设置。当你完成后，从建立菜单中选择"生成源"；对话框编辑器dialog editor 及 项目管理器会负责剩下的事情。你可以通过选择"生成"或"执行"来测试是否一切正常, 这会 建立你的包含了你的新资源的应用。但是不要期望对话框已经可用--这通常是一个开发者工作 完成implementation 的一般方式。但不要担心--这也并非那么困难。要想得到关于创 建对话的更多信息，请参见对话框编辑器, 实 例及指导可参见KDevelop编程手册

### 4.3.2.2. 捆绑新元素

在你创建了你的用户界面并生成了你的资源后，你可以准备让你的应用通过对象来使用他 们。如上所述，通常一个基于GUI 的程序会包含菜单条和主视；另外主视可由控制条 操作,它是主应用类及其连接的文档对象的一部分。按照面向对象的设计, 你可以将给出的 结构描述为"文档--视图--控制器"模式。这种模式通过介绍对象在程序中的作用描述了对象 在应用中的基本功能。控制器代表协调主应用的一类，它通过菜单条及工具条，状态条提供 用户交互功能。文档类的任务是代表用户使用的文档。因此，文档类应该可以完成所有的比 如装载文件和重新保存文件的操作。现在视图位于应用窗口中央, 为用户以可视化方式显示 文档的一部分，并提供所有功能使用户可改动数据。由于控制条和工具条已出现，你的工作 将是创建主视，以及用户可以用于改变任何设置或使用另外功能的其他对话。

要建立你的主视，为你的应用生成的源代码已经以&<;YourApplication&>;形式包含了一 个类，继承`QWidget`类的视图(这是操纵Qt中可视化界面的最小类，因此也在 KDE 中)。 总的来说,展开给定的来有三种不同的方法:

- 去掉文档--视图结构并使用一个预先定义的已包含了很多功能的"大 "widgets ，只需去掉视图类并由另一类代替。

- 改变视图类的继承，改变至，例如，QmultiLineEdit，这样你的应用会变成一个编辑 器。

- 如果你的主视窗口要包含若干独立部件，你就需要用dialog editor 创建你需 要的widgets 及其classes ，并在连接后可生成主视的视图类生成器中创建该 classes 的对象。

对对话来说，情况就有些不同了。通常的做法是从菜单条或工具条上按钮进入，访问对话框。 在你创建了你的对话并生成资源代码后，类就可用于创建作为对话的对象了。所以你先看一 下，在菜单条找出适当的位置来加入用户选择后可打开对话的入口。如果给出的菜单与你的 要求不符，你可以创建一个象其他菜单一样的新的弹出菜单，插入你的项目及当你的菜单被 选中后你想要访问的地方。通过创建对话类实例实现slot，并用基础类提供的成员函数 member functions 访问对话框。而且你还必须为菜单项指定ID。应用程序框架把已给 出的ID收集于文件resource.h中，因此你只需加入ID并给它一个新编号。这样你就完成 了--另外你还可以创建另外的工具条按钮并加入状态帮助信息。现在你们的应用给用户提供 了可视的新功能。接着你必须加入你的对话将用到的操纵任何参数值的方法的实现 implementation 。最后，访问你的生成工具或"执行"，改写过的文件会被重新编译； 这样你改动的结果可以立即测试。

### 4.3.2.3. 完整开发过程

以上我们已经讨论了关于如何利用KDE开始建立新的应用及如何扩展用户界面的一般方法。 现在，这些是IDE帮助你的标准步骤，但KDE却不仅仅为你提供创建应用及其可视化部件的 工具。下面我们将对它对推动应用开发提供的功能做一个简要描述。

#### 4.3.2.3.1. 源代码管理

Kdevelop IDE提供给编程人员很多的方法使他们在最短的时间内完成其目标。如以上所述， KappWizard 和dialogeditor 缩短了你手工要达成同样结果一般所需的时间。但 这并不包括一个程序员通常必须做的工作：为应用的完成努力工作，以使终端用户能正确的 执行。那么，为什么KDE是你希望用做编程环境的IDE，包括它的即使是非GUI 应用 的创建作用？

无疑，IDE总体的管理着你的项目；那就是说，你无须小心对变化的保存，Makefile 的生成，等等--这提供了整个项目的管理，KDE会在任何一个C++应用开发中不遗余力的为 你服务。你可以很容易的理解，把管理的任务从程序员手中接过后，他可以更专注于源代码 的编写工作了。在通常遍布于项目中许多不同的文件，因此你可以分离一定的文件。但这意 味着仍然要努力工作--作为开发人员，你仍然不得不创建这些文件和编写这些标准内容，例 如包含了数据，作者名的头部文件，及例如代码的执照术语。另外，这要求你必须记得你的 函数，及类declaration s和implementation 在何处。因此，KDE包含了类工具 --各种各样的操作，他允许快速操作和将开发者的注意力从文件转移至对象classes ， 结构和方法。类生成器让你可以轻易创建一个包含继承，attributes ，和文档的新的 类。对于面向对象的工作，类浏览器把你带到你的对象的位置；而代码实际在哪个位置已不 再有什么关系了。浏览器自动扫描所有资源并在有增改时自我重建以跟上你的工作，使你可 以直接得到新的代码。通过上下文菜单,类浏览器会提供更多的功能，例如，将你带到实现 implementation 或成员函数member functions 的声明declaration 。然后，成员的增加 可以通过对话来完成--不必寻找文件和你要加入的项的位置。最后，你可以通过类工具对话 得到你的项目的类classes 的更为专业的视图，它会以树的形式显示类classes 及其 对象的作用，内容和继承。要想得到更详细的信息，请参见类浏览器

#### 4.3.2.3.2. 建立并执行你的应用

Kdevelop IDE是特别设计来为你完成你必须定期执行的所有那些步骤，例如建立和执行你 的程序及在源代码中定位errors 。

你可以开始你的建立过程，通过：

- 单击工具条上的"建立"或"全部重建"符号

- 或从"建立"菜单中选择"建立"或"全部重建"

要执行你的应用，请选择

- 工具条中的"执行"或"编译"符号(由你的程序启动 KDbg )

- 建立菜单中的相关菜单项

- 或者通过"由Arguments 执行"来用其他arguments启动你的应用

要想得到关于建立过程的更多信息，请参见项目篇。

#### 4.3.2.3.3. 寻找程序错误

由于一般 errors 错误会在创建过程（由Compiler 编译器监控 ，并且由 于它们源于代码的句法错误，一般被称作句法errors 错误。）或应用的执行过程中发 生，它们必须由程序员找到并除去。 要定位errors 错误,开发者需要得到引起错误发 生的确切信息。 如上所述，Compiler 编译器本身可以检测句法errors 错误,导 致可执行文件无法建立(这在Linker 连接器检测到"unresolved 信号时也有可能发生 --参见连接器选项连接选项). 它会尽可能详细 的对错误作出描述，这样错误就可以找到并去除。在创建过程,你可以看见output 输 出窗口弹出，告诉你你的make工具和编译器Compiler 要说的话。万一遇到了错误 errors 或者警告warnings , 只要在错误行按动鼠标按钮，编辑器就会打开该文 件并将光标移到错误行。这也可以通过"视图"菜单中的"下一个错误"和"上一个错误"条目或 通过相关键盘快捷方式shortcuts 来完成。你会发现这十分好用，为你到达错误 节省了不少时间,这样排除状况只要求你作为程序员的相关知识。 实时错误是在执行时出现的，大多数情况下会导致节段错误，有时很难发现。因此， 你可以让编译器Compiler 把信息加入二进制文件以监测源代码的执行。调试器则是允 许你通过启动应用并在代码中为需中断执行的地方设置断点来完成它的另一类程序，因此你 可以严格控制其实现implementation s 而且通过这样至少可以检测引起错误发生的 行。找出真正的引发原因则是另一项任务；它要依靠程序员对它的定位。gdb是GNU编 译器Compiler 提供的调试器，象ddd 或KDbg 一样的程序是允许更 方便使用的前端。因此KDevelop使用KDbg 并让你可以通过"建立"菜单中的"调试"命 令或工具条中的"调试"标志来激活调试debugging 程序。要想知道关于调试 debugging 应用的更多信息，请参见项目篇 及 KDevelop编程手册 。