当前位置: 代码迷 >> 综合 >> Address Book Example
  详细解决方案

Address Book Example

热度:14   发布时间:2023-12-01 15:19:01.0

这个是一个Qt 助手的一个widget例题,展示的是如何使用代理模型将不同的视图显示到单个模型视图上。

本例题中一共创建了5个类来实现,分别是tablemodel,newaddresstab,adddialog,addresswidget,mainwindow五个类和一个main.cpp。本次只介绍下该程序的设计思路以及从那部分开始编写。代码的具体解释请看“https://github.com/Iconzjy/Qt-Example.git”中的addressbook。

在实现本项目前,需要实现数据操作管理的模块。首先创建tablemodel这个类,这个类继承QAbstractTableModel这个模板类,在这个类的定义里,创建了Contact结构体(捆绑姓名和地址)并实现==运算符重载,在头文件内实现<<和>>的重载,这两个操作符在addressWidget类中使用。在类TableModel中,绝大多数都是重写QAbstractTableModel以及它的QAbstractItemModel的函数。在设个类中,添加类型为Contact的QList容器变量作为数据的存储。

在实现了TableModel类后,接着实现AddDialog类。这个类继承QDialog类,基本实现添加信息的窗口,使用了布局管理器(可以在Qt助手中Layout Management关键字查看)。在这个类中重要的部分是两个信号和槽的实现,由父窗口来接收信号。

 在实现添加信息的窗口后,就开始实现主窗口的功能和布局了。接着是实现主窗口的选项卡的页面,创建的类名为NewAddresTab,这个类的有一组信号和槽,在构造函数中,链接的是添加按钮和addEntry函数(创建一个添加信息的对话框),并在关闭的对话框的时候把姓名和地址这两个变量当做信号发射出去,并在AddressWidget类中接收信息。

 接着,就要实现把所接受到的数据分配到各个不同的选项卡的页面,以及实现这些页面。例题中创建一个AddressWidget的类,这个类继承与QTabWidget,这个类主要实现文件的读写,还记得第一个块中讲到tablemodel中<<和>>的重载吗,就是应用在文件的读写上面的。在类中对于信息操作的插入都是在第一行插入的,然后后面的信息往下移动。在这个类中最重要也算是比较复杂的函数是setupTabs(),这个类主要使用了代理模块类,正则表达式,lambada表达式。至于其他的信号和槽的分析,在源代码中都有注释。

 最后就是创建MainWindow类,这个类主要是菜单功能的实现和布局,感觉这个类的内容都是比较基础和容易理解的,就不多介绍了。

             

 最后在main.cpp文件中实现主窗口的显示。

如果是想编写这个例题,可以按照每个块所介绍类的顺序进行。

例题中使用了很多的模型/视图框架,这些需要在平时的编程中慢慢体会才能明白其中的作用。

  相关解决方案