持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。
示例运行效果:
文件目录:
具体实现:
NewAddressTab类:
NewAddressTab类是这里的第一个tab页,当地址簿中没有数据是,就会显示这个tab页提示用户添加数据,当地址簿中有数据时,这个tab页就不展示了。
这个类主要显示提示信息和一个添加按钮。包含一个添加按钮点击的槽函数,和一个向外界发送数据信息的信号。
构造函数:
构造函数主要实现窗口部件的创建、属性的设置以及信号的连接。
addEntry函数:
这个函数是“Add”按钮的槽函数,槽函数中完成了实例化一个AddDialog对象,即弹出添加数据的弹框。点击“ok”后通过发出sendDetails()信号,从对话框中提取数据并将其发送到AddressWidget的addEntry()槽函数中。
- 这里我们可以看到获取对话框的数据是在exec()函数执行完成之后获取的,这样做是可以的,因为对话框的生命周期在整个addEntry()中,所以只要没有走出addEntry()函数,整个对话框都是存在的。
AddDialog类:
AddDialog类实现的是添加数据弹框,它提供了一个QLineEdit用来输入姓名和一个QTextEdit用来输入地址信息来将数据输入到地址簿中。包里面含了两个Label,两个编辑框和两个按钮。只有一个成员函数是构造函数。
构造函数:
构造函数中完成了这个弹框所有的工作,包括创建所有的小部件,并对部件进行布局。连接按钮点击信号到槽函数。
accept: 隐藏模态对话框,并将结果DialogCode设置为Qt::Accepted(1)。
reject: 隐藏模态对话框,并将结果DialogCode设置为Qt::Rejected(0)。
所以我们在对话框exec()函数的返回值中可以判断是否要保存这条数据。
MainWindow类:
MainWindow类扩展了QMainWindow,并实现了操作地址簿所需的菜单和操作。主要包括各种小部件的实例,创建菜单方法,打开文件方法,保存文件方法,更新操作方法。
构造函数:
MainWindow的构造函数实例化AddressWidget,将其设置为其中心部件,并调用createMenus()函数。
createMenus函数:
createMenus()函数用来设置File和Tools菜单,并将它们触发的信号连接到对应的槽函数上。编辑和删除操作在默认情况下是禁用的,因为这样的操作不能在空的地址簿上执行。只有当添加了一个或多个联系人时才启用。将AddressWidget的selectionChanged()信号连接到updateActions()。
openFile函数:
该函数的作用是允许用户通过打开文件对话框选择一个文件。所选文件必须是包含地址簿联系人的自定义.dat文件。这个函数是一个连接到File菜单中的openAct的槽函数。
saveFile函数:
saveFile()函数允许用户通过保存文件对话框保存文件。这个函数是一个连接到File菜单中的saveAct的槽函数。
updateActions函数:
updateActions()函数启用和禁用编辑和删除条目取决于地址簿的内容。如果地址簿为空,则禁用这些操作;否则,它们是启用的。这个函数是一个连接到AddressWidget的selectionChanged()信号的槽函数。
一点思考:
- 在选择模型时,要充分考虑自己的需求选择合适的模型类。
- 多了解Qt自带的一些类的功能,避免在写程序时自己造轮子。
- 要提升自己写抽象类的能力。