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头文件:
(2)MainWindow.cpp是这个程序中最复杂的部分。在构造函数中,你创建主窗口界面并将必需的信号连接到槽。与以往一样,从#include语句开始:
(3)现在用KAction构件创建菜单和工具栏项:
(4)为了寻求变化,你用QBox布局构件来取代通常的QLayout类:
(5)接下来是QListView构件,它占据了窗口的大部分区域。然后,你将必需的信号连接到doSearch槽,来执行CD数据库查询。你添加一条空信息让KMainWindow的状态栏可见:
(6)doSearch槽是应用程序中最重要的部分。它读取搜索字符串,提取所有匹配的CD和它们的曲目。其逻辑和第16章中GNOME/GTK+的doSearch完全相同。
(7)提取匹配CD的标识(id),更新状态栏以显示搜索结果:
(8)对每个id,取得CD信息,插入到QListView中,并获取这个CD的所有曲目:
(9)当addcd_action菜单项或工具栏按钮被激活时,AddCd槽将被调用:
其运行结果见图17-13。
图 17-13
17.7.2 AddCdDialog
要向数据库中添加CD,你需要编写一个对话框,对话框中有一些需要输入的字段。
(1)输入以下代码,将它命名为AddCdDialog.h。注意:AddCdDialog继承自KDialogBase(一个KDE对话框构件)。
(2)接下来是AddCdDialog.cpp,它在okClicked槽中调用了MySQL接口代码的add_cd:
图17-14显示了AddCdDialog的运行结果。
图 17-14
17.7.3 LogonDialog
当然,你在没有登录数据库的情况下是不能查询它的,所以你需要一个简单的对话框来输入登录信息。我们将这个类称为LogonDialog。
(1)首先是头文件LogonDialog.h。注意:为了寻求变化,这里继承类QDialog而不是KDialogBase。
(2)这次,你有更好的方法来管理用户名和密码,而不是在LogonDialog.cpp中封装database_start调用,下面是LogonDialog.cpp的代码:
其运行结果见图17-15。
图 17-15
17.7.4 main.cpp
现在只剩下main函数未编写了,你把它放在一个单独的源文件main.cpp中。
(1)在main.cpp中,你先打开一个LogonDialog,然后通过database_start登录。如果登录失败,就将显示一个QMessageBox,或者如果用户想退出LogonDialog,就将询问用户是否确定要退出。
(2)剩下的就是编写.pro文件,并将它传递给qmake。这个文件名为cdapp.pro:
注意:这里你只是将app_mysq1.c改名为app_mysq1.cpp,这样它将被看做为一个普通的C++源文件。这可以避免将C语言的目标文件链接到C++带来的麻烦。
如果一切正常,你的CD数据库应用程序就制作完成了!
你可能想尝试用MySQL接口实现其他功能(如向CD中添加曲目或删除CD),来进一步了解KDE/Qt。你可以创建对话框、新的菜单项和工具栏项,以及编写底层逻辑。尽管去尝试吧!