17.7 使用KDE/Qt编写CD数据库应用程序

让我们再次把注意力集中到CD应用程序上来,现在你可以用KDE/Qt的强大功能来实现它了。你将使用和第16章一样的窗口布局,并实现类似的功能。

先回忆一下你想让CD数据库应用程序实现的功能:

❑ 通过GUI界面登录数据库;

❑ 搜索CD;

❑ 显示CD和曲目信息;

❑ 向数据库中添加CD;

❑ 显示一个“关于”(About)窗口。

17.7.1 主窗口

我们从编写应用程序的主窗口开始,它包含搜索输入构件和搜索结果列表。

(1)先输入MainWindow.h的代码(或从本书的网站上下载它)。因为窗口包含一个用于搜索CD的QLineEdit构件和一个用于显示搜索结果的QListView构件,所以你需要包含qlistview.h和qlineedit.h头文件:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图1

(2)MainWindow.cpp是这个程序中最复杂的部分。在构造函数中,你创建主窗口界面并将必需的信号连接到槽。与以往一样,从#include语句开始:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图2

17.7 使用KDE/Qt编写CD数据库应用程序 - 图3

(3)现在用KAction构件创建菜单和工具栏项:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图4

(4)为了寻求变化,你用QBox布局构件来取代通常的QLayout类:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图5

17.7 使用KDE/Qt编写CD数据库应用程序 - 图6

(5)接下来是QListView构件,它占据了窗口的大部分区域。然后,你将必需的信号连接到doSearch槽,来执行CD数据库查询。你添加一条空信息让KMainWindow的状态栏可见:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图7

(6)doSearch槽是应用程序中最重要的部分。它读取搜索字符串,提取所有匹配的CD和它们的曲目。其逻辑和第16章中GNOME/GTK+的doSearch完全相同。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图8

(7)提取匹配CD的标识(id),更新状态栏以显示搜索结果:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图9

(8)对每个id,取得CD信息,插入到QListView中,并获取这个CD的所有曲目:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图10

17.7 使用KDE/Qt编写CD数据库应用程序 - 图11

(9)当addcd_action菜单项或工具栏按钮被激活时,AddCd槽将被调用:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图12

其运行结果见图17-13。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图13

图 17-13

17.7.2 AddCdDialog

要向数据库中添加CD,你需要编写一个对话框,对话框中有一些需要输入的字段。

(1)输入以下代码,将它命名为AddCdDialog.h。注意:AddCdDialog继承自KDialogBase(一个KDE对话框构件)。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图14

17.7 使用KDE/Qt编写CD数据库应用程序 - 图15

(2)接下来是AddCdDialog.cpp,它在okClicked槽中调用了MySQL接口代码的add_cd:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图16

图17-14显示了AddCdDialog的运行结果。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图17

图 17-14

17.7.3 LogonDialog

当然,你在没有登录数据库的情况下是不能查询它的,所以你需要一个简单的对话框来输入登录信息。我们将这个类称为LogonDialog。

(1)首先是头文件LogonDialog.h。注意:为了寻求变化,这里继承类QDialog而不是KDialogBase。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图18

(2)这次,你有更好的方法来管理用户名和密码,而不是在LogonDialog.cpp中封装database_start调用,下面是LogonDialog.cpp的代码:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图19

17.7 使用KDE/Qt编写CD数据库应用程序 - 图20

其运行结果见图17-15。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图21

图 17-15

17.7.4 main.cpp

现在只剩下main函数未编写了,你把它放在一个单独的源文件main.cpp中。

(1)在main.cpp中,你先打开一个LogonDialog,然后通过database_start登录。如果登录失败,就将显示一个QMessageBox,或者如果用户想退出LogonDialog,就将询问用户是否确定要退出。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图22

17.7 使用KDE/Qt编写CD数据库应用程序 - 图23

(2)剩下的就是编写.pro文件,并将它传递给qmake。这个文件名为cdapp.pro:

17.7 使用KDE/Qt编写CD数据库应用程序 - 图24

17.7 使用KDE/Qt编写CD数据库应用程序 - 图25

注意:这里你只是将app_mysq1.c改名为app_mysq1.cpp,这样它将被看做为一个普通的C++源文件。这可以避免将C语言的目标文件链接到C++带来的麻烦。

17.7 使用KDE/Qt编写CD数据库应用程序 - 图26

如果一切正常,你的CD数据库应用程序就制作完成了!

你可能想尝试用MySQL接口实现其他功能(如向CD中添加曲目或删除CD),来进一步了解KDE/Qt。你可以创建对话框、新的菜单项和工具栏项,以及编写底层逻辑。尽管去尝试吧!